我使用Knockout 3和Ryan Niemeyer的插件jqAutocomplete。我对这个型号有疑问:
var ViewModel = function() {
var self = this;
self.myOptionsObs = ko.observableArray([
{ id: ko.observable(1), name: ko.observable("item 1 o"), description: ko.observable("item label 1 o") },
{ id: ko.observable(2), name: ko.observable("item 2 o"), description: ko.observable("item label 2 o") },
{ id: ko.observable(3), name: ko.observable("item 3 o"), description: ko.observable("item label 3 o") }
]);
self.myValueObs = ko.observable();
};
ko.applyBindings(new ViewModel());
<input data-bind="jqAuto: { source: myOptionsObs, value: myValueObs, inputProp: 'name', template: 'itemTmpl' }" />
如您所见,有一个可观察数组,每个元素也是一个可观察的。
自动填充效果不佳。正如您在Fiddle中看到的那样,左列有一个可观察的数组,但其元素不可观察。如果单击左侧框并写入内容,则会显示一个选项列表。
但是在右栏中,你有相同的,但元素都是可观察的。如果您在右侧框中单击并写入内容,则当列表显示时,如果您上下移动光标,则可以看到行的名称&#39;被删除并填充零。
我的数据绑定属性需要更改什么?
此问题与this question有关。
我必须说这solution 对我有效。但更新的插件不是。
谢谢!
答案 0 :(得分:2)
jqAutoComplete插件没有设置为使用可观察的属性(尽管可以在没有太多工作的情况下对其进行增强)。
目前,我认为您最好的选择是创建一个计算器,它将始终返回您选项的简单版本。
self.myOptionsObs.plain = ko.computed(function() {
return ko.toJS(self.myOptionsObs);
});
示例:http://jsfiddle.net/rniemeyer/45cepL9b/
我试着看看有关支持可观察属性的一些观点。不应该做很多改变。