这是我的团队为处理自动完成而编写的绑定处理程序的简化版本。当一个项目被选中时,该项目被插入到视图模型中的一个可观察数组中。它以下列方式绑定:
<input type="text" data-bind="autoComplete:myObservableArray, source:'myUrl'" />
您可以自定义在“选择: ”区域 中选择项目时发生的情况。
ko.bindingHandlers.autoComplete = {
init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
var postUrl = allBindingsAccessor().source; // url to post to is read here
var selectedObservableArrayInViewModel = valueAccessor();
$(element).autocomplete({
minLength: 2,
autoFocus: true,
source: function (request, response) {
$.ajax({
url: postUrl,
data: { term: request.term },
dataType: "json",
type: "POST",
success: function (data) {
response(data);
}
});
},
select: function (event, ui) {
var selectedItem = ui.item;
if (!_.any(selectedObservableArrayInViewModel(), function (item) { return item.id == selectedItem.id; })) { //ensure items with the same id cannot be added twice.
selectedObservableArrayInViewModel.push(selectedItem);
}
}
});
}
};
希望您正在寻找类似的东西。如果您需要澄清一些事情,请告诉我。
注意除了 jquery 和 knockout,此示例还使用 underscore.js(_.any() 函数)