【问题标题】:Remove data-bind attributes after binding绑定后删除数据绑定属性
【发布时间】:2015-05-06 12:15:36
【问题描述】:

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

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

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

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

或者对整个生成的标记进行单独的附加循环,删除所有 data-bind 属性。

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

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

【问题讨论】:

  • 你可以使用 JQuery 并使用 .removeAttr()
  • @Robert 感谢您的输入,但这与我提供的第二个选项相同,只是增加了一个库的开销,而我没有专门标记问题。

标签: javascript knockout.js


【解决方案1】:

也许preprocessNode 可以帮忙:

您可以通过提供一个节点预处理器来挂钩 Knockout 的遍历 DOM 的逻辑。这是一个函数,Knockout 将为它遍历的每个 DOM 节点调用一次,无论是在第一次绑定 UI 时,还是稍后注入任何新的 DOM 子树时(例如,通过 foreach 绑定)。

以下将删除数据绑定属性:

ko.bindingProvider.instance.preprocessNode = function(node) {
    if (node.removeAttribute) {
        setTimeout(function() {
            node.removeAttribute('data-bind');
        }, 0);
    }
};

http://jsfiddle.net/jfjbpbtq/

setTimeout 是必需的,因为在调用 preprocessNode 后,knout 会读取 data-bind 属性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-10
    • 1970-01-01
    • 2018-05-22
    • 1970-01-01
    • 2011-02-04
    • 1970-01-01
    • 2010-12-10
    相关资源
    最近更新 更多