首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何停止对子元素进行knockout.js绑定求值

如何停止对子元素进行knockout.js绑定求值
EN

Stack Overflow用户
提问于 2012-02-13 09:45:05
回答 2查看 10.3K关注 0票数 20

使用knockout,当您调用ko.applyBinding(viewModel, "divId")时,它通过您绑定到的元素("divId")的子元素进行递归绑定。我想在一个子节点上停止这个评估。有没有办法做到这一点?

为什么..。

我想绑定整个页面到一个导航视图模型,这将处理基本的布局和...smile…导航。在不同的页面上,我想将某些区域绑定到不同的视图模型,这些模型不是导航视图模型的属性。此时,如果我这样做,我会得到"unable to parse binding“错误,因为导航视图模型没有所需的属性。如果我可以停止dom中的绑定,我就可以单独绑定这些项。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-13 11:43:12

有几种方法可以用来解决这个问题。通常,您会将多个“子”视图模型添加到主视图模型中,然后在各个区域上使用with绑定与实际视图模型进行绑定。

从技术上讲,你可以做你想做的事情。您可以创建一个自定义绑定,告诉KO它将自己处理绑定子对象。它看起来是这样的:

代码语言:javascript
复制
ko.bindingHandlers.stopBindings = {
    init: function() {
        return { controlsDescendantBindings: true };
    }  
};

当你把它放在一个元素上时,KO会忽略它的子元素。然后,您可以使用不同的视图模型在此元素的子元素上调用ko.applyBindings。

示例:http://jsfiddle.net/rniemeyer/tWJxh/

但是,通常情况下,您将使用with绑定在一个主视图模型下使用多个视图模型。

票数 39
EN

Stack Overflow用户

发布于 2012-02-13 10:21:23

我做到这一点的一种方法是为导航创建一个部分(或者只是一个),并将navVM绑定到它。然后为内容创建另一个部分,并将contentVM绑定到该部分。这样就不会有冲突,所有的一切都是非常分离的。

代码语言:javascript
复制
<body>
    <div id="navSection">
    </div>
    <div id="contentSection">
    </div>
</body>

然后执行ko.applyBinding(navVM,"navSection")和ko.applyBinding(contentVM,"contentSection")

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

https://stackoverflow.com/questions/9254632

复制
相关文章

相似问题

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