So I've successfully been able to implement autocomplete which adds item to a list (fiddle).
Now I need to use jQuery UI autocomplete to populate some data fields. Still trying to wrap my head around Knockout, I don't think I've successfully bound the autocomplete.
I thought data-bind="autocompleteAddress: items
would trigger my data-bind="autocompleteAddress
, but nothing is happening (see me fiddle here)
Is there something obvious I'm missing?
My code looks like this:
// HTML (the 'source:' is used for my ajax call. Not used in the fiddle)
<input
type="text"
data-bind="autocompleteAddress: {source: '/address/autocompleteAddress'}"
name="Address[street1]"
value="Stovner Senter 3"
placeholder="Enter street name"
class="street1 form-control ui-autocomplete-input"
autocomplete="off" />
// JS
var search_data = [
{"id": "7186","street1": "Bose","street2": "","postal_code": "0521","city": "Oslo","country":"Norway"},
{"id": "1069","street1": "BOSS Black","street2": "","postal_code": "0531","city": "Oslo","country":"Norway"},
{"id": "1070","street1": "BOSS Green","street2": "","postal_code": "0522","city": "Oslo","country":"Norway"}
];
ko.bindingHandlers.autocompleteAddress = {
init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
var postUrl = site_url + allBindingsAccessor().source; //Not used here
var self = viewModel;
$(element).autocomplete({
minLength: 2,
source: function (request, response) {
response(search_data);
},
select: function (e, ui) {
var item = ui.item;
}
}).data("uiAutocomplete")._renderItem = function (ul, item) {
return jQuery("<li></li>")
.data("ui-autocomplete", item)
.append("<a>" + item.street1 + ' ' + item.city + "</a>")
.appendTo(ul);
}
}
};