applyBindings 的第二个参数有什么用?

2024-01-11

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

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

KnockoutJS 是开源的。来自相关文件 https://github.com/knockout/knockout/blob/bc27aed2c33dcc49cac4ce8bb907da87eae568c6/src/binding/bindingAttributeSyntax.js#L567:

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 https://developer.mozilla.org/en-US/docs/Web/API/Node.nodeType必须是 1 (ELEMENT_NODE) or 8 (COMMENT_NODE),否则会抛出错误。

The 相关文档(“激活淘汰赛”) http://knockoutjs.com/documentation/observables.html#activating-knockout不太明确它必须是一个 DOM 节点,但是(参见我添加的强调部分)确实说了同样的事情:

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

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

See 这个相关问题 https://stackoverflow.com/questions/7342814/knockoutjs-ko-applybindings-to-partial-view对于典型的用例。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

applyBindings 的第二个参数有什么用? 的相关文章

随机推荐