Knockoutjs:填充选择列表后刷新绑定

时间:2012-03-22 23:50:39

标签: knockout.js

我觉得以前一定要问这个,但我看了

但那些问题并不是我面临的问题。

在我看来,我从ajax调用中收到一个viewmodel。该对象是国家ID。在随后的ajax调用中,我检索国家/地区列表(名称和ID)并从列表中填充一个选择框。

使用

将选择框绑定到viewmodel的国家/地区ID
<select data-bind="value: CountryId"/>

但是当我填充下拉列表时,视图模型的国家/地区不会被预先选中。我必须手动调用ko.applyBindings(vm),这是一个问题,因为数据是从处理级联选择框的jQuery插件填充的。它没有对viewmodel的引用(我也不想提供它)。我可以暴露一个回调,但这有点打哈欠。

我创建了a fiddle,可以更清晰地说明这个问题。如果单击“测试选择”按钮,您会注意到下拉列表已预先选择为第0项。取消注释js面板中的行,Bob是您的叔叔。

我没有到这里来的?这不是一个基本的淘汰赛功能吗?

-Jules

2 个答案:

答案 0 :(得分:2)

正如John Earles所说,将项目添加到选择列表不会触发“更改”事件。我的结论是,这实际上是一件好事。来自其中一个(非常好的)Knockout tutes:

  

绑定捕获DOM事件并相应地更新viewmodel属性。

这是我想要的反向行为!所以我坚持回调。目前它只调用applyBindings()。您可以在原始小提琴的this revision中看到一个示例(为清晰起见,省略了回调等)。

答案 1 :(得分:0)

你可以这样做,但你需要访问视图模型:

http://jsfiddle.net/jearles/nw4cH/36/

通过调整Select来阻止它进行评估,直到你填充了observableArray(在以后的调用中)。