knockout applyBindings忽略选择器

时间:2012-02-04 00:14:18

标签: knockout.js

我真的很喜欢ko并且对applyBindings函数有疑问。

看起来,我可能做错了,ko不喜欢将绑定应用到页面的同一部分。为了避免这种情况,我们可以传递一个context /元素作为第二个参数来告诉ko要使用哪个页面区域。

我想要做的是传递第三个参数,该参数告诉ko要忽略哪些元素/类。

基本上,我想要使用不同模型的嵌套区域。

有人知道这是否可行,或者其他人已经实施过它?

感谢

1 个答案:

答案 0 :(得分:2)

关于这一点的几点想法:

1-通常情况下,您不希望多次拨打ko.applyBindings。一般的技术是使用template绑定或ifwith绑定来确保某些区域在准备就绪之前不受约束。您甚至可以拥有一个整体视图模型,该模型仅包含页面每个区域的可观察对象。然后,您可以使用with绑定,确保它们不会过早绑定并将它们交换出来。

这是一个简单实用的示例,您可以在其中控制放在每个部分中的模板名称和数据,并将其交换出来:http://jsfiddle.net/rniemeyer/6f5E9/。有很多方法可以做到这一点,样本只是最准确的方法。

2- Knockout允许自定义绑定providers。您可以编写一个绑定提供程序,它只是忽略基于可配置选择器的某些元素。

类似的东西:

var myPartialBindingProvider = function(initialExclusionSelector) {
    var result = new ko.bindingProvider(),
        originalHasBindings = result.nodeHasBindings;

    result.exclusionSelector = initialExclusionSelector;

    result.nodeHasBindings = function(node) {
        return !$(node).is(result.exclusionSelector) && originalHasBindings.call(this, node);
    };

    return result;
};


ko.bindingProvider.instance = new myPartialBindingProvider(".skip");

这个简单的人不会处理应该被排除的元素的子元素,但可以通过某种方式对子元素进行标记。

以下是一个示例: http://jsfiddle.net/rniemeyer/pC5rg/