我真的很喜欢ko并且对applyBindings函数有疑问。
看起来,我可能做错了,ko不喜欢将绑定应用到页面的同一部分。为了避免这种情况,我们可以传递一个context /元素作为第二个参数来告诉ko要使用哪个页面区域。
我想要做的是传递第三个参数,该参数告诉ko要忽略哪些元素/类。
基本上,我想要使用不同模型的嵌套区域。
有人知道这是否可行,或者其他人已经实施过它?
感谢
答案 0 :(得分:2)
关于这一点的几点想法:
1-通常情况下,您不希望多次拨打ko.applyBindings
。一般的技术是使用template
绑定或if
和with
绑定来确保某些区域在准备就绪之前不受约束。您甚至可以拥有一个整体视图模型,该模型仅包含页面每个区域的可观察对象。然后,您可以使用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/