के बजाय ऑब्जेक्ट लेने के लिए बूटस्ट्रैप-टाइपहेड बढ़ाएं, मैंने स्ट्रिंग के बजाय ऑब्जेक्ट लेने के लिए बूटस्ट्रैप-टाइपहेड बढ़ाया है।
यह काम करता है लेकिन मैं जानना चाहता हूं कि यह चीजों को करने का सही तरीका है।स्ट्रिंग
धन्यवाद।
संदर्भ:
http://twitter.github.com/bootstrap/javascript.html#typeahead http://twitter.github.com/bootstrap/assets/js/bootstrap-typeahead.js
_.extend($.fn.typeahead.Constructor.prototype, {
render: function (items) {
var that = this;
items = $(items).map(function (i, item) {
i = $(that.options.item)
.attr('data-value', item[that.options.display])
.attr('data-id', item.id);
i.find('a').html(that.highlighter(item));
return i[0];
});
items.first().addClass('active');
this.$menu.html(items);
return this;
},
select: function() {
var val = this.$menu.find('.active').attr('data-value'),
id = this.$menu.find('.active').attr('data-id');
this.$element
.val(this.updater(val, id))
.change();
return this.hide()
}
});
return function (element, options) {
var getSource = function() {
return {
id: 2,
full_name: 'first_name last_name'
};
};
element.typeahead({
minLength: 3,
source: getSource,
display: 'full_name',
sorter: function (items) {
var beginswith = [],
caseSensitive = [],
caseInsensitive = [],
item,
itemDisplayed;
while (item = items.shift()) {
itemDisplayed = item[this.options.display];
if (!itemDisplayed.toLowerCase().indexOf(this.query.toLowerCase())) {
beginswith.push(item);
} else if (~itemDisplayed.indexOf(this.query)) {
caseSensitive.push(item);
} else {
caseInsensitive.push(item);
}
}
return beginswith.concat(caseSensitive, caseInsensitive);
},
highlighter: function (item) {
var query = this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, '\\$&');
return item[this.options.display].replace(new RegExp('(' + query + ')', 'ig'), function ($1, match) {
return '<strong>' + match + '</strong>';
});
},
matcher: function (item) {
var value = item[this.options.display];
return {
value: ~value.toLowerCase().indexOf(this.query.toLowerCase()),
id: item.id
};
},
updater: function (item, userId) {
options.hiddenInputElement.val(userId);
return item;
}
});
};
निम्नलिखित काम करता है मैं नहीं दिख रहा है कि कैसे आप भी है कि अब तक हो रही है। जब मैं आपके कोड को चलाने का प्रयास करता हूं तो वस्तुओं पर स्ट्रिंग विधियों को लागू करने का प्रयास करने के लिए 'सॉर्टर()' विधि में अपवाद फेंक दिया जाता है। क्या आप उस विधि को बदल रहे थे? या शायद वस्तुओं में कार्यों को जोड़ना? – merv
हाँ, आप सही हैं क्योंकि मैंने अन्य बदलाव किए हैं जिन्हें मैंने अभी तक पोस्ट नहीं किया है .. मैं इसे बाद में बनाउंगा। धन्यवाद –
हाँ, यह मददगार होगा, क्योंकि 'matcher()' और 'sorter()' दोनों 'रेंडर()' विधि को पास करने से पहले 'आइटम' को बदल दें। साथ ही, एपीआई में 'sorter() 'को ओवरराइड करना समर्थित है, इसलिए ** bootstrap-typeahead.js ** स्रोत में इसे संपादित करने की आवश्यकता नहीं होनी चाहिए। (यह नहीं कह रहा कि आप क्या कर रहे थे - बस इसे इंगित करते हुए) – merv