使用knockout,当你调用ko.applyBinding(viewModel, "divId")
时,它会通过你绑定的元素(“divId”)的子元素进行递归绑定。我想在子节点停止此评估。有没有办法做到这一点?
之所以......
我想将整个页面绑定到导航视图模型,这将处理基本布局和...微笑...导航。在各个页面上,我想将某些区域绑定到不是导航视图模型属性的不同视图模型。目前,如果我这样做,我得到“无法解析绑定”错误,因为导航视图模型没有所需的属性。如果我可以阻止绑定走下dom,我可以单独绑定这些项目。
答案 0 :(得分:37)
您可以通过多种方式继续使用此方法。通常,您可以将多个“子”视图模型添加到主视图模型,然后使用实际视图模型的各个区域上的with
绑定来绑定它们。
技术上可以做你想做的事。您可以创建一个自定义绑定,告诉KO它将处理绑定子项本身。它看起来像是:
ko.bindingHandlers.stopBindings = {
init: function() {
return { controlsDescendantBindings: true };
}
};
当你把它放在一个元素上时,KO会忽略这些孩子。然后,您可以使用不同的视图模型在此元素的子节点上调用ko.applyBindings。
示例:http://jsfiddle.net/rniemeyer/tWJxh/
通常情况下,您可以使用with
绑定在主视图模型下使用多个视图模型。
答案 1 :(得分:3)
我这样做的一种方法是为导航(或只是a)创建一个部分并将navVM绑定到它。然后为内容创建另一个部分并将contentVM绑定到它。这样就没有冲突,而且一切都很分开。
<body>
<div id="navSection">
</div>
<div id="contentSection">
</div>
</body>
然后执行ko.applyBinding(navVM,“navSection”)和ko.applyBinding(contentVM,“contentSection”)