Javascript 在调用ko.applyBindings后,向Knockout viewmodel添加新属性
在(webforms)页面中,我有一个按钮,可以打开动态加载的 问题是,我希望这个对话能够掌握自己的淘汰视图模型,但视图模型已经在主页中设置好了 我想在Javascript 在调用ko.applyBindings后,向Knockout viewmodel添加新属性,javascript,jquery,knockout.js,webforms,Javascript,Jquery,Knockout.js,Webforms,在(webforms)页面中,我有一个按钮,可以打开动态加载的 问题是,我希望这个对话能够掌握自己的淘汰视图模型,但视图模型已经在主页中设置好了 我想在ko之后不可能向视图模型添加新属性。调用applyBindings。 相反,我应该研究另一种设计。但是哪个呢 申请将需要我进行一些我希望现在避免的大的重新设计 将所有对话框绑定作为键值列表是可能的,但并不十分优雅。主页只需添加一个vm.dialogueKeyvalueCollection 我目前可能的解决方案是让主窗体添加对话的属性vm.dia
ko之后不可能向视图模型添加新属性。调用applyBindings
。相反,我应该研究另一种设计。但是哪个呢
- 申请将需要我进行一些我希望现在避免的大的重新设计李>
- 将所有对话框绑定作为键值列表是可能的,但并不十分优雅。主页只需添加一个
李>vm.dialogueKeyvalueCollection
- 我目前可能的解决方案是让主窗体添加对话的属性
,然后添加我的html控件。目前的解决方案是再次这样调用vm.dialogue.userName()vm.dialogue.searchResult()
:ApplyBindings
ko.ApplyBindings(vm,$('#对话框形式')[0])代码>用于添加的HTML。我相信(现在仍然是这样)要为不同的DOM元素调用
,一个元素不能嵌套在另一个元素中。对动态HTML的绑定进行注释和jsfiddle李>applyBindings
- ?
ko.applybindingstoode
函数绑定附加的html
ko.applybindingstoode(appendedelement,{binding options})
希望这能对您有所帮助。我使用嵌套视图模型进行了大量合成,通常是为了创建对话模型。请参阅完整的答案 不过,只使用
和
绑定可能更简单。您可以在viewmodel上创建一个对话框viewmodel
可观察属性
当您准备好显示对话时,只需在其中填充一个或多个可观察的键,例如
this.dialogueViewmodel({
markup: ko.observable("<h1>Kittens!</h1>")
});
只要dialogueViewmodel
为null
,就不会绑定和呈现任何内容。这仅在添加对话数据时发生-无需再次摆弄applyBindings
不过,您可能需要编写自己的绑定到jQueryUI.dialogue的接口
第三种选择:我已经写了一篇文章,它附带了一个开箱即用的击倒装订。这是一个例子。如果您没有设置jQueryUI,那么这可能是另一种选择;虽然文档并不完美,但我很乐意尽我所能帮助您修复文档。applyBindingsToNode是从哪里来的?我不知道宽度是什么,我只是在文本中看到了它,但没有查看它。看起来很有希望。也许是我一直在寻找的答案,但直到我自己测试了它。在撰写本文时,我(不幸地)已经决定了一个更为粗糙的解决方案。在继续学习的过程中,我希望能记得不断更新这篇文章。我注意到,通过尝试和恐惧,在DOM的新创建部分调用
applyBindings(vm,DomeElement)
是可以的。我的猜测是,一旦一个控件被绑定,它就不能再被绑定;虽然新的DOM元素从未绑定过,所以绑定它们是可以的。我想,正如我没有尝试过的那样,新元素/DOM树必须放在现有的叶子上,因为遍历这个新DOM不能遍历到已经绑定的元素中。这完全可以理解吗?
<!-- ko with: dialogueViewmodel -->
<div id="dialog" title="Basic dialog" data-bind="html: markup">
</div>
<!-- /ko -->