【发布时间】:2012-04-07 14:27:17
【问题描述】:
我觉得这一定是以前问过的,但我看过
- 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 调用中收到了一个视图模型。在该对象中是一个国家 ID。在随后的 ajax 调用中,我检索国家列表(名称和 ID)并从列表中填充一个选择框。
选择框绑定到视图模型的国家 ID 使用
<select data-bind="value: CountryId"/>
但是当我填充下拉列表时,视图模型的国家没有预先选择。我必须手动调用 ko.applyBindings(vm),这是一个问题,因为数据是从处理级联选择框的 jQuery 插件填充的。它没有对视图模型的引用(我也不想提供它)。我可以公开一个回调,但这有点打哈欠。
我创建了a fiddle,更清楚地说明了这个问题。如果你点击 Test Select 按钮,你会注意到下拉菜单被预选为 Item 0。在 js 面板中取消注释该行,Bob 是你的叔叔。
我在这里没有得到什么?这不是基本的淘汰功能吗?
-朱尔斯
【问题讨论】:
-
我不认为你将能够做你想做的事。值绑定将为选择设置“更改”侦听器,以便在您选择新选项时做出反应。您只是在选择中添加选项,因此 Knockout 无法知道它应该做任何事情。即使它知道,它也会将值重置为 0,因为您的选项没有指定选择哪一行 - 这意味着将选择 0。
-
我认为你可能是对的。我现在已经使用了回调机制,但是我遇到了一个问题。已使用新信息更新了问题。
-
从头开始,我已经解决了次要问题。很快就会发布这个问题的答案。
-
正如您所说,将项目添加到选择列表不会触发“更改”事件。我已经得出结论,这实际上是一件好事。从(非常好的)Knockout tutes 之一:> 绑定捕获 DOM 事件并相应地更新视图模型属性。这是我想要的相反行为!所以我一直坚持回调。目前它只调用
applyBindings()。您可以在原始小提琴的this revision 中看到一个示例(为清楚起见,省略了回调等)。
标签: knockout.js