我觉得这个问题以前肯定有人问过,但我看过
- Knockout JS binding initial value of dropdown list
- Knockout does not sync manual set of option's selected attribute
- How to pre-select an option in a dropdown knockout js
和
但这些问题并不完全是我面临的问题。
在我看来,我从 ajax 调用中收到了一个 View 模型。该对象中有一个国家/地区 ID。在后续的 ajax 调用中,我检索国家/地区列表(名称和 ID)并从列表中填充选择框。
选择框使用绑定(bind)到 View 模型的国家/地区 ID
<select data-bind="value: CountryId"/>
但是当我填充下拉列表时,未预先选择 View 模型的国家/地区。我必须手动调用 ko.applyBindings(vm),这是一个问题,因为数据是从处理级联选择框的 jQuery 插件填充的。它没有对 View 模型的引用(我也不想提供它)。我可以公开回调,但这有点麻烦。
我创建了a fiddle这更清楚地说明了这个问题。如果单击“测试选择”按钮,您会注意到下拉列表已预选为“项目 0”。取消注释 js 面板中的行,Bob 就是您的叔叔。
我在这里没有得到什么?这不是基本的 knockout 功能吗?
-朱尔斯
最佳答案
正如 John Earles 所说,将项目添加到选择列表不会触发“更改”事件。我得出的结论是,这实际上是一件好事。来自(非常好的) knockout 类(class)之一:
Bindings catch DOM events and correspondingly update viewmodel properties.
这与我想要的行为相反!所以我坚持使用回调。目前它只是调用 applyBindings()。您可以在 this revision 中查看示例。原始 fiddle 的(为了清楚起见,省略了回调等)。
关于knockout.js - knockout : refresh bindings after populating select list,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9832241/