我一直在寻找,但是找不到applyBindings()
的文档。第二个参数可以合法包含什么?可以是元素数组吗?它必须是一个元素吗?通过两次调用applyBindings可以将绑定(bind)应用于两个单独节点的子元素吗?
ko.applyBindings(myViewModel, div1);
ko.applyBindings(myViewModel, div2);
最佳答案
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节点,但是(请参阅重点,由我添加)确实说了同样的话:
只要节点不共享树的一部分(例如,它们是 sibling ),就可以在每个节点上安全地调用applyBindings(实际上,这是使用第二个参数的原因之一)。
有关典型的用例,请参见this related question。
关于knockout.js - applyBindings的第二个参数是做什么用的?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18990244/