【发布时间】:2015-04-22 18:02:36
【问题描述】:
在(网络表单)页面中,我有一个按钮可以打开动态加载的jqueryui dialogue。
问题是我希望这个对话成为它自己的淘汰视图模型的主人,但是视图模型已经在主页中设置了。
我想在调用ko.applyBindings 之后不可能向视图模型添加新属性。
相反,我应该研究另一种设计。但是哪个?
- 申请bindings to different parts of the DOM 需要我进行一些我希望现在避免的重大重新设计。
- 将所有对话绑定作为键值列表是可能的,但恕我直言,这不是很优雅。然后主页只需要添加一个
vm.dialogueKeyvalueCollection。 - 我目前可能的解决方案是让主窗体添加对话的属性
vm.dialogue.userName() vm.dialogue.searchResult(),然后我的html 控件won't bind as they are created afterapplyBindingsis called。目前的解决方案是再次调用ApplyBindings,如下所示:ko.applyBindings(vm, $('#dialog-form')[0]);用于添加的 HTML。我相信(现在仍然有点),为不同的 DOM 元素调用applyBindings一定不能嵌套在另一个元素中。绑定到动态 HTML 注释为 here 和 jsfiddled here。 - ?
【问题讨论】:
-
经过反复试验,我注意到在 DOM 的新创建部分上调用
applyBindings(vm, domElement)是可以的。我的猜测是,一旦控件被绑定,它就不能再绑定了;虽然从未绑定过新的 DOM 元素,所以绑定它们是可以的。我想,正如我没有尝试过的那样,新元素/DOM 树必须放在现有的叶子上,因为遍历这个新的 DOM 不能遍历已经绑定的元素。 这完全可以理解吗?
标签: javascript jquery knockout.js webforms