【发布时间】:2014-07-05 20:47:52
【问题描述】:
在我终于能够在列表中添加和删除项目 (see fiddle) 之后,我开始实施 jQuery 自动完成功能。
查看Rune's example 和Rene's example 后,我能够触发自动完成。但是当我选择一个项目时,这些值不会添加到我的隐藏输入和搜索框中。
我当前的解决方案遵循 Rune 的示例,但一旦我能够绑定所选项目,我可能会简化它并遵循 Rene 的示例。
所以我的问题是:如何绑定所选项目? I've created a Fiddle 进行测试。
PS。将搜索数据放入数组(而不是从数据库中获取)时,我在小提琴中遇到问题。但这不是我的主要问题。
这是关于自动完成的部分代码:
我的 HTML:
<input type="hidden" value="" data-bind="value: item_id" />
<input class="form-control" type="search" data-bind="value: item_name, autoComplete: items" />
...
<ul class="list-group" data-bind="template: { name: 'item-template', data: $root.items}">
...
</ul>
我的JS;
// Retrieved from DB
var search_data = [
{"id":"7186","name":"Bose"},
{"id":"1069","name":"BOSS Black"},
{"id":"1070","name":"BOSS Green"},
{"id":"1071","name":"BOSS Hugo Boss"},
{"id":"1072","name":"BOSS Orange"},
{"id":"1074","name":"Boston Brothers"},
{"id":"7678","name":"Bosweel"}
];
ko.bindingHandlers.autoComplete = {
init: function(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
var selectedObservableArrayInViewModel = valueAccessor();
var self = bindingContext;
self.item_id = ko.observable();
self.item_name = ko.observable();
$(element).autocomplete({
minLength: 2,
source: function (request, response) {
$.ajax({
source: search_data,
data: { term: request.term },
type: "POST",
dataType: "json",
success: function (data) {
response(data);
}
});
},
select: function(e, ui){
var item = ui.item;
self.item_name = ko.observable(item.name);
self.item_id = ko.observable(item.id);
}
}).data( "uiAutocomplete" )._renderItem = function( ul, item ) {
return jQuery( "<li></li>" )
.data( "ui-autocomplete", item )
.append( "<a>"+ item.name + "</a>" )
.appendTo( ul );
}
}
};
【问题讨论】:
标签: jquery jquery-ui knockout.js autocomplete