在(webforms)页面中,我有一个按钮,可以打开动态加载的jqueryui dialogue 问题是我想让这个对话成为自己的淘汰视图模型的主人,但是视图模型已经在主页面中设置了。
我认为在调用ko.applyBindings
后, 可能会在视图模型中添加新属性。
相反,我应该研究另一种设计。但是哪个?
vm.dialogueKeyvalueCollection
。 vm.dialogue.userName() vm.dialogue.searchResult()
,然后我的html控件won't bind as they are created after applyBindings
is called。目前的解决方案是再次调用ApplyBindings
:ko.applyBindings(vm, $('#dialog-form')[0]);
添加HTML。我相信(并且仍然有点)为不同的DOM元素调用applyBindings
,不能嵌套在另一个DOM元素中。绑定到动态HTML的注释为here和jsfiddled here。 答案 0 :(得分:2)
我使用嵌套视图模型进行了大量编写,通常用于创建对话模式。请参阅here以获得完整的答案。
但是,尝试使用with
绑定可能会更简单。您可以在viewmodel上创建dialogueViewmodel
可观察属性。
当您准备好显示对话时,只需用一个或多个可观察的键填充它,例如
this.dialogueViewmodel({
markup: ko.observable("<h1>Kittens!</h1>")
});
并将其包装在with
绑定中:
<!-- ko with: dialogueViewmodel -->
<div id="dialog" title="Basic dialog" data-bind="html: markup">
</div>
<!-- /ko -->
只要dialogueViewmodel
为null
,就不会绑定和渲染任何内容。只有在添加对话数据时才会发生这种情况 - 无需再次使用applyBindings
。
但是,您可能必须使用jQueryUI.dialogue编写自己的绑定接口。
第三个选项:我已经编写了一个modal library,附带一个开箱即用的Knockout绑定。这是一个JSfiddle demo。如果你没有设置jQueryUI,那可能是另一种选择;虽然文档并不完美,但我很乐意以任何方式帮助您并在此过程中修复文档。
答案 1 :(得分:0)
你可以ko.applyBindingsToNode
函数绑定附加的html。
ko.applyBindingsToNode(appendedelement,{ binding options})
希望这会对你有所帮助。