异步knockout observable Array选择加载选项

时间:2014-09-22 16:03:41

标签: javascript ajax knockout.js ko.observablearray html-select

我有一个基于selectOptions ajax的asincronous加载器;它接受远程地址并返回一个可观察的数组,正确填充了以下绑定所接受的描述和键值

 <select data-bind="value: selectedVal, options: opts, optionsText: 'desc', optionsValue:'key', optionsCaption: ''"/></div>

事实是,当我触发一个选择选项更改时,基于一些用户操作,我将它分配给我的模型可观察数组,我没有得到选择popuated,但仍然是空的。

 mymodel.opts = loadOptions("<remoteaddress>");

我知道当第二行被调用时,anwer还没有到达,但是返回的值是observableArray,因此它应该在填充时正确响应,并且被分配给与ui绑定的可观察数组。

如果我从ajax调用(当它返回时)对返回的对象进行硬编码,从Firefox中的console.log获取它,或者如果我将可观察数组opts传递给loadOptions,并将其更改为在其中构建opts,然后它工作,但我真的需要按原样使用loadOptions,asincronous。我还试图追加mymodel.opts.valueHasMutated(),但是ko不能使用newlly到达的observableArray。

如果可能的话,保留选项加载器的完整性,如果可能的话,不使用自定义绑定,我可以在传入的observable数组准备就绪时使用它吗?

1 个答案:

答案 0 :(得分:1)

你遇到的问题是,当这条线路运行时:

mymodel.opts = loadOptions("<remoteaddress>");

它用不同的 observableArray替换整个可观察数组,而不是更新当前的数组。您需要更新现有的 - 您可以更改loadOptions以返回正常数组,而不是可观察数组吗?然后你可以这样做:

//clear any existing entries
mymodel.opts.removeAll();
//push the new entries in
mymodel.opts.push.apply(mymodel.opts, loadOptions("<remoteaddress>"));
相关问题