数组可观察,内容可观察且jqAutocomplete

时间:2015-10-26 03:19:24

标签: jquery-ui knockout.js autocomplete

我使用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 对我有效。但更新的插件不是

谢谢!

1 个答案:

答案 0 :(得分:2)

jqAutoComplete插件没有设置为使用可观察的属性(尽管可以在没有太多工作的情况下对其进行增强)。

目前,我认为您最好的选择是创建一个计算器,它将始终返回您选项的简单版本。

self.myOptionsObs.plain = ko.computed(function() {
   return ko.toJS(self.myOptionsObs); 
});

示例:http://jsfiddle.net/rniemeyer/45cepL9b/

我试着看看有关支持可观察属性的一些观点。不应该做很多改变。