【问题标题】:KnockoutJS IF binding - keep DOMKnockoutJS IF 绑定 - 保持 DOM
【发布时间】:2016-01-13 11:41:53
【问题描述】:

如果条件为falseif 绑定会移除 DOM 并停止执行内部 data-bind 属性。

即使条件为false,是否也可以保留DOM?我只想在条件为false 时停止执行data-bind,但由于 JQuery 绑定等原因,我不希望删除任何 DOM。

【问题讨论】:

  • 那你为什么不能使用visible呢?无论click 或其他事件如何(它们不应该),您的data-bind 是否使用自行执行操作的绑定处理程序?
  • 可见绑定不会停止执行元素内部的data-bind 属性。我从一开始就将所有网站页面都插入到 DOM 中。我将绑定应用于所有这些。有些页面包含我一开始没有的数据。可观察对象是空的。在这种情况下,不应执行data-bind。首先,当我从数据库中填写 observable 时,应该执行内部的 data-bind 绑定。
  • 如果您使用 KO,则不应依赖存储在 DOM 中的状态。因此,您应该将所有 jquery 绑定移动到自定义 KO 绑定,在这种情况下,当 if 再次评估为 true 时,您的 jquery 绑定将在评估 data-bind 时自动重新应用。
  • 这是一个例子。我还有其他库,例如 Framework7 等。我无法控制所有这些的绑定...

标签: javascript jquery knockout.js data-binding


【解决方案1】:

我提出了以下解决方案,它基本上会延迟淘汰绑定应用程序,直到满足条件。

当条件变为false 时它不会删除绑定,但在我的情况下这不是必需的。

ko.bindingHandlers['applyWhen'] = {
  init: function() {
    return { controlsDescendantBindings: true };
  },
  update: function(element, valueAccessor, allBindings, model, bindingContext) {
    if (!element.bindingApplied && Boolean(ko.unwrap(valueAccessor()))) {
      element.bindingApplied = true;
      ko.applyBindingsToDescendants(bindingContext, element);
    }
  }
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-05
    • 2012-01-18
    相关资源
    最近更新 更多