Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在调用ko.applyBindings后,向Knockout viewmodel添加新属性_Javascript_Jquery_Knockout.js_Webforms - Fatal编程技术网

Javascript 在调用ko.applyBindings后,向Knockout viewmodel添加新属性

Javascript 在调用ko.applyBindings后,向Knockout viewmodel添加新属性,javascript,jquery,knockout.js,webforms,Javascript,Jquery,Knockout.js,Webforms,在(webforms)页面中,我有一个按钮,可以打开动态加载的 问题是,我希望这个对话能够掌握自己的淘汰视图模型,但视图模型已经在主页中设置好了 我想在ko之后不可能向视图模型添加新属性。调用applyBindings。 相反,我应该研究另一种设计。但是哪个呢 申请将需要我进行一些我希望现在避免的大的重新设计 将所有对话框绑定作为键值列表是可能的,但并不十分优雅。主页只需添加一个vm.dialogueKeyvalueCollection 我目前可能的解决方案是让主窗体添加对话的属性vm.dia

在(webforms)页面中,我有一个按钮,可以打开动态加载的 问题是,我希望这个对话能够掌握自己的淘汰视图模型,但视图模型已经在主页中设置好了

我想在
ko之后不可能向视图模型添加新属性。调用applyBindings

相反,我应该研究另一种设计。但是哪个呢

  • 申请将需要我进行一些我希望现在避免的大的重新设计
  • 将所有对话框绑定作为键值列表是可能的,但并不十分优雅。主页只需添加一个
    vm.dialogueKeyvalueCollection
  • 我目前可能的解决方案是让主窗体添加对话的属性
    vm.dialogue.userName()vm.dialogue.searchResult()
    ,然后添加我的html控件。目前的解决方案是再次这样调用
    ApplyBindings
    ko.ApplyBindings(vm,$('#对话框形式')[0])用于添加的HTML。我相信(现在仍然是这样)要为不同的DOM元素调用
    applyBindings
    ,一个元素不能嵌套在另一个元素中。对动态HTML的绑定进行注释和jsfiddle
  • ?

您能否
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 -->