applyBindings 的第二个参数是做啥用的?

Posted

技术标签:

【中文标题】applyBindings 的第二个参数是做啥用的?【英文标题】:What's the applyBindings' second parameter used for?applyBindings 的第二个参数是做什么用的? 【发布时间】:2013-09-30 04:17:32 【问题描述】:

我一直在寻找但找不到applyBindings() 的文档。第二个参数可以合法包含什么?它可以是一个元素数组吗?它必须是单个元素吗?是否可以通过两次调用applyBindings将绑定应用于两个独立节点的子元素?

       ko.applyBindings(myViewModel, div1);
       ko.applyBindings(myViewModel, div2);

【问题讨论】:

【参考方案1】:

KnockoutJS 是开源的。来自relevant file:

ko.applyBindings = function (viewModelOrBindingContext, rootNode) 
    // Some code omitted for brevity...

    if (rootNode && (rootNode.nodeType !== 1) && (rootNode.nodeType !== 8))
        throw new Error("ko.applyBindings: first parameter should be your view model; second parameter should be a DOM node");
    rootNode = rootNode || window.document.body; // Make "rootNode" parameter optional

    applyBindingsToNodeAndDescendantsInternal(getBindingContext(viewModelOrBindingContext), rootNode, true);
;

所以是的,它似乎必须是单个 DOM 节点。更具体地说,nodeType 必须是 1 (ELEMENT_NODE) 或 8 (COMMENT_NODE),否则会引发错误。

relevant documentation ("Activating Knockout") 不太明确地表明它必须是一个 DOM 节点,但是(请参阅强调,由我添加)确实说了同样的话:

(可选)您可以传递第二个参数来定义要搜索data-bind 属性的文档的哪个部分。例如,ko.applyBindings(myViewModel, document.getElementById('someElementId'))。这会将激活限制为 ID 为 someElementId 的元素及其后代,如果您希望拥有多个视图模型并将每个模型与页面的不同区域相关联,这将非常有用。

只要节点不共享树的一部分(例如,它们是兄弟姐妹),您就可以在每个节点上安全地调用 applyBindings(事实上,这是使用第二个参数的一个原因)。

有关典型用例,请参阅 this related question。

【讨论】:

在答案中添加特定的 KO 源代码很好。【参考方案2】:

可以在以下链接中找到...http://knockoutjs.com/documentation/observables.html

如果您想知道 ko.applyBindings 的参数是做什么的,

第一个参数表示您要使用的视图模型对象 它激活的声明性绑定

(可选)您可以传递第二个参数来定义 要搜索数据绑定属性的文档。例如, ko.applyBindings(myViewModel, document.getElementById('someElementId'))。这限制了 激活 ID 为 someElementId 的元素及其后代, 如果您想拥有多个视图模型并关联,这很有用 每个都有不同的页面区域。

【讨论】:

【参考方案3】:

如果有人希望使用类来实现这一点

for i of $('.myView')
  ko.applyBindings(new MyView(),$('.myView')[i])

【讨论】:

这段代码创建了 n 个 MyView 实例,它们彼此不相关。在许多情况下,这是一个糟糕的解决方案

以上是关于applyBindings 的第二个参数是做啥用的?的主要内容,如果未能解决你的问题,请参考以下文章

STUN stun.l.google.com:19302 是做啥用的

SetPixelFormat() 中的 PIXELFORMATDESCRIPTOR 参数是做啥用的?

predicateWithBlock: 中块的 bindings 参数是做啥用的?

Symfony2 中的 SECRET 参数是做啥用的?

Tensorflow variable_scope 中的 partitioner 参数是做啥用的?

maven.multiModuleProjectDirectory 是做啥用的?