绑定后删除数据绑定属性

时间:2015-05-06 12:15:37

标签: javascript knockout.js

我使用Knockout.js来处理项目中的许多事情 除此之外,它还可以动态地为第三方工具构建XML配置,这需要非常具体,严格的标记。

这意味着,所有生成的标记都必须没有任何data-bind属性。

目前我可以通过额外绑定来实现这一目标

<Element data-bind="attr: {'data-bind': false}" />

或者在整个结果标记上执行单独的附加循环,删除所有data-bind属性。

这两种解决方案都不太直接,第一种解决方案意味着非常冗长的模板,第二种解决方案需要对整个结果进行额外的传递。

Knockout是否提供了一个更好的替代方法,可以在应用绑定后删除所有data-bind属性?

1 个答案:

答案 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属性。