使用knockout,当您调用ko.applyBinding(viewModel, "divId")
时,它通过您绑定到的元素("divId")的子元素进行递归绑定。我想在一个子节点上停止这个评估。有没有办法做到这一点?
为什么..。
我想绑定整个页面到一个导航视图模型,这将处理基本的布局和...smile…导航。在不同的页面上,我想将某些区域绑定到不同的视图模型,这些模型不是导航视图模型的属性。此时,如果我这样做,我会得到"unable to parse binding“错误,因为导航视图模型没有所需的属性。如果我可以停止dom中的绑定,我就可以单独绑定这些项。
发布于 2012-02-13 11:43:12
有几种方法可以用来解决这个问题。通常,您会将多个“子”视图模型添加到主视图模型中,然后在各个区域上使用with
绑定与实际视图模型进行绑定。
从技术上讲,你可以做你想做的事情。您可以创建一个自定义绑定,告诉KO它将自己处理绑定子对象。它看起来是这样的:
ko.bindingHandlers.stopBindings = {
init: function() {
return { controlsDescendantBindings: true };
}
};
当你把它放在一个元素上时,KO会忽略它的子元素。然后,您可以使用不同的视图模型在此元素的子元素上调用ko.applyBindings。
示例:http://jsfiddle.net/rniemeyer/tWJxh/
但是,通常情况下,您将使用with
绑定在一个主视图模型下使用多个视图模型。
发布于 2012-02-13 10:21:23
我做到这一点的一种方法是为导航创建一个部分(或者只是一个),并将navVM绑定到它。然后为内容创建另一个部分,并将contentVM绑定到该部分。这样就不会有冲突,所有的一切都是非常分离的。
<body>
<div id="navSection">
</div>
<div id="contentSection">
</div>
</body>
然后执行ko.applyBinding(navVM,"navSection")和ko.applyBinding(contentVM,"contentSection")
https://stackoverflow.com/questions/9254632
复制相似问题