哦,这很容易。applyBindings
Knockout JS 中的方法接受一个可选的 DOM 元素作为第二个参数。因此,在您的情况下,您可以执行以下操作:
ko.applyBindings(myViewModel,
document.getElementById('myModuleWrapperDiv'));
ko.applyBindings(otherViewModel,
document.getElementById('otherModuleWrapperDiv'));
唯一的问题是您将无法在单个 DOM 子树中混合和匹配来自两个视图模型的绑定。例如,此标记将起作用:
<div id="myModuleWrapperDiv">
...
</div>
<div id="otherModuleWrapperDiv">
...
</div>
但是,这不会:
<div id="myModuleWrapperDiv">
...
<div id="otherModuleWrapperDiv">
...
</div>
</div>
以下是我使用 Knockout 制作小部件的方法。请注意,在 95% 的情况下,只需加载模板并对其应用绑定即可。但是,如果您需要一个打包的小部件(即作为一个单独的组件发布的东西),最好的方法是将其包装在自定义绑定中。Angular JS 通过它的指令推广了类似的方法。
为您的小部件设计标记作为文档片段。你可以做任何你想做的事:简单的 HTML,一个占位符div
,所有的渲染和交互都在 JavaScript 中完成——一切都会做。
为您的模板设计一个视图模型。想想你的小部件可能需要的数据来渲染、操作和构建你的模型。
为您的小部件创建自定义绑定。最简单的事情是将它放在占位符div
元素上。
一种。您的init
方法应该加载模板并将内部小部件视图模型的绑定应用到它。应用绑定后,您可以将生成的文档片段附加到占位符div
。
湾。您的更新方法应该根据通过自定义绑定属性参数提供的值来更改内部视图模型的状态。