我使用Knockout.js来处理项目中的许多事情 除此之外,它还可以动态地为第三方工具构建XML配置,这需要非常具体,严格的标记。
这意味着,所有生成的标记都必须没有任何data-bind
属性。
目前我可以通过额外绑定来实现这一目标
<Element data-bind="attr: {'data-bind': false}" />
或者在整个结果标记上执行单独的附加循环,删除所有data-bind
属性。
这两种解决方案都不太直接,第一种解决方案意味着非常冗长的模板,第二种解决方案需要对整个结果进行额外的传递。
Knockout是否提供了一个更好的替代方法,可以在应用绑定后删除所有data-bind
属性?
答案 0 :(得分:4)
也许preprocessNode可以提供帮助:
您可以通过提供节点预处理器来挂接Knockout的逻辑以遍历DOM。这是Knockout将为其遍历的每个DOM节点调用一次的函数,无论是在第一次绑定UI时,还是在注入任何新的DOM子树时(例如,通过foreach绑定)。
以下将删除data-bind属性:
ko.bindingProvider.instance.preprocessNode = function(node) {
if (node.removeAttribute) {
setTimeout(function() {
node.removeAttribute('data-bind');
}, 0);
}
};
请参阅http://jsfiddle.net/jfjbpbtq/
setTimeout
是必需的,因为敲门会在调用data-bind
后读取preprocessNode
属性。