code: function(templateName, data) {
  		var value, id, label;
  		var html = '';
  		var cache = false;
  		var self = this;
  		var regex_tag = /^[\t \r\n]*<([a-z][a-z0-9\-_]*(?:\:[a-z][a-z0-9\-_]*)?)/i;
  
  		if (templateName === 'option' || templateName === 'item') {
  			value = hash_key(data[self.settings.valueField]);
  			cache = !!value;
  		}
  
  		// pull markup from cache if it exists
  		if (cache) {
  			if (!isset(self.renderCache[templateName])) {
  				self.renderCache[templateName] = {};
  			}
  			if (self.renderCache[templateName].hasOwnProperty(value)) {
  				return self.renderCache[templateName][value];
  			}
  		}
  
  		// render markup
  		html = $(self.settings.render[templateName].apply(this, [data, escape_html]));
  
  		// add mandatory attributes
  		if (templateName === 'option' || templateName === 'option_create') {
  			if (!data[self.settings.disabledField]) {
  				html.attr('data-selectable', '');
  			}
  		}
  		else if (templateName === 'optgroup') {
  			id = data[self.settings.optgroupValueField] || '';
  			html.attr('data-group', id);
  			if(data[self.settings.disabledField]) {
  				html.attr('data-disabled', '');
  			}
  		}
  		if (templateName === 'option' || templateName === 'item') {
  			html.attr('data-value', value || '');
  		}
  
  		// update cache
  		if (cache) {
  			self.renderCache[templateName][value] = html[0];
  		}
  
  		return html[0];
  	}
docs: A helper method for rendering "item" and
  "option" templates, given the data.
  
  @param {string} templateName
  @param {object} data
  @returns {string}