大家好,淘汰賽和JQuery UI定製的結合上觀察到的陣列更新
沒有recoginizing插件我使用Knockoutjs在使用jQuery UI組件聯合使用以顯示與多個跨度爲每個所選項目的自動完成框。
我下面下面的方法
1)在視圖模型具有可觀察到的陣列(selecteditems)並將其綁定到JQUERY UI自動完成構件的輸入框綁定到聲明性模板來顯示跨越
2)以顯示建議,並在每個選擇上使用CustomBindingHandler將新項目添加到selecteditems數組中。
3)使用CustomBindingHandler向每個SPAN顯示綁定到可觀察數組selected items的JQUERY UI ToolTip小部件。
發出─那我面對的是jQuery UI的工具提示部件是顯示了在負載沒有任何問題,但無論何時,只要selecteditems陣列中的改變,工具提示部件沒有在CustomBindingHandler
任何認可非常感謝您的幫助。
<div>
<div style="max-height: 105px;" data-bind="foreach: selectedItems">
<span data-bind="text: name, id: id, assignToolTip: id"></span>
<input data-bind="assignAutoComplete: { rootVm: $root }" type="email" value="">
</div>
</div>
<script>
var MyViewModel = function() {
this.selectedItems = ko.observableArray(
[{ name: "eww", id: "ww" },
{ name: "aa", id: "vv" },
{ name: "xx", id: "zz" }]);
};
ko.bindingHandlers.assignToolTip = {
init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
if ($(element) != undefined) {
var currentDataItem = ko.dataFor(element);
$(element).tooltip({
items: 'span',
track: true,
content: function() {
return "<ul><li>" + currentDataItem.name + "</li><li>" + currentDataItem.id + "</li></ul>";
}
});
}
},
};
ko.bindingHandlers.assignAutoComplete = {
init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
if ($(element) != undefined) {
var currentDataItem = ko.dataFor(element);
$(element).autocomplete({
source: function (request, response) {
$.ajax({
url: "http://ws.geonames.org/searchJSON",
dataType: "jsonp",
data: {
featureClass: "P",
style: "full",
maxRows: 12,
name_startsWith: request.term
},
success: function (data) {
response($.map(data.geonames, function (item) {
return {
label: item.name + (item.adminName1 ? ", " + item.adminName1 : "") + ", " + item.countryName,
value: item.name
};
}));
}
});
},
minLength: 2,
select: function (event, ui) {
var settings = valueAccessor();
var rootVm = settings.rootVm;
rootVm.selectedItems.push({ name: ui.item.label, id: ui.item.label });
return false;
},
open: function() {
$(this).removeClass("ui-corner-all").addClass("ui-corner-top");
},
close: function() {
$(this).removeClass("ui-corner-top").addClass("ui-corner-all");
}
});
}
}
};
ko.applyBindings(new MyViewModel());
</script>
<script src="~/Scripts/jquery-ui-1.10.3.js"></script>
爲什麼'if($(element)!= undefined)'?首先,使用'if(element)'更短,不涉及拋出式jQuery調用,但更重要的是:'element'永遠不會被定義。 *(哦,最重要的是,'$(任何))'永遠不會被定義爲開頭,它將始終是一個jQuery對象)* – Tomalak
@Tomalak我沒有試圖編碼審查現有的代碼。當然'如果(元素)'更有意義,但這不是OP的問題。 –
哦,我設法忽略了這是直接來自OP。那麼,假設評論是針對他的,那麼。 :) – Tomalak