首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在调用ko.applyBindings之后,向Knockout视图模型添加新的属性

在调用ko.applyBindings之后,向Knockout视图模型添加新的属性
EN

Stack Overflow用户
提问于 2015-02-20 22:39:34
回答 2查看 704关注 0票数 2

在(webforms)页面中,我有一个打开动态加载的jqueryui对话的按钮。

问题是,我希望这个对话能够掌握自己的淘汰赛视图模型,但是视图模型已经在主页中设置了。

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

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

  • 应用绑定到DOM的不同部分将需要我进行一些我希望现在避免的大的重新设计。
  • 将所有对话框绑定作为键值列表是可能的,但不是非常优雅的IMHO。然后,主页只需添加一个vm.dialogueKeyvalueCollection即可。
  • 我现在可能的解决方案是让主表单添加对话的属性vm.dialogue.userName() vm.dialogue.searchResult(),然后让html控制被调用。目前的解决方案是再次调用ApplyBindings,类似于添加的ko.applyBindings(vm, $('#dialog-form')[0]);。我相信(而且在某种程度上仍然如此),要调用不同DOM元素的applyBindings,就不能嵌套在另一个DOM元素中。与动态HTML的绑定被注释为这里和jsfiddled 这里
EN

回答 2

Stack Overflow用户

发布于 2015-02-21 09:43:15

我用嵌套的视图模型做了很多组合,通常是为了创建对话模型。关于一个完整的答案,请参见这里

不过,仅仅使用with绑定可能会更简单一些。您可以在视图模型上创建一个dialogueViewmodel可观察属性。

当您准备显示对话时,只需用一个或多个可观察到的键填充它,例如

代码语言:javascript
复制
this.dialogueViewmodel({
  markup: ko.observable("<h1>Kittens!</h1>")
});

并将其包装在with绑定中:

代码语言:javascript
复制
<!-- ko with: dialogueViewmodel -->
  <div id="dialog" title="Basic dialog" data-bind="html: markup">
  </div>
<!-- /ko -->

只要dialogueViewmodelnull,任何东西都不会被绑定和呈现。只有当您添加对话数据时才会发生这种情况--不需要再修改applyBindings

不过,您可能需要编写自己的绑定来与jQueryUI.dialogue进行接口。

第三种选择:我已经编写了一个模态库,它附带了一个从盒子里绑定的淘汰机。这是一个JSfiddle演示。如果您没有设置jQueryUI,那可能是另一种选择;虽然文档并不完美,但我很乐意帮助您尽可能地修复这些文档。

票数 2
EN

Stack Overflow用户

发布于 2015-02-21 04:31:21

你能用ko.applyBindingsToNode函数来绑定附加的html吗?

ko.applyBindingsToNode(appendedelement,{ binding options})

希望这能帮到你。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28639480

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档