【问题标题】:Knockout Template Binding If: option changes from true to true, rerenders templateKnockout Template Binding If: 选项从 true 变为 true,重新渲染模板
【发布时间】:2014-08-10 21:28:22
【问题描述】:

我发现如果我有如下模板绑定:

<!-- ko template: { name: 'mytemplate', if: myObservable() == 1 || myObservable() == 2  } -->
<!-- /ko -->

当 myObservable 直接从 1 变为 2 时,knockout 将重新渲染 mytemplate。if 语句永远不会进入错误状态,但 knockout 会重新渲染整个模板。

这是一个淘汰错误吗?

切换到以下结构可以轻松避免该问题:

<!-- ko if: myObservable() == 1 || myObservable() == 2 -->
<!-- ko template: { name: 'mytemplate' } --><!-- /ko -->
<!-- /ko -->

这对我来说似乎并不明显,原生 if 绑定与模板绑定中的 if 选项不同。引用自模板绑定的淘汰文档:

原生模板是支持 foreach 的机制,如果,使用, 和其他控制流绑定。

为什么 if: 绑定的这两种用法不同?

【问题讨论】:

    标签: knockout.js


    【解决方案1】:

    在 Knockout 2.2 之前,更改 if 绑定中的值会导致重新渲染,即使从真实值更改为真实值(即在您的情况下为 1->2)也是如此。 这是在 2.2 中修复的。我想,这个问题仍然存在于模板绑定中的“if”条件中。

    你可以在this excellent post阅读更多关于 if 和 re-render 的信息

    【讨论】:

      猜你喜欢
      • 2015-06-16
      • 2011-11-02
      • 1970-01-01
      • 2019-11-19
      • 2013-08-15
      • 2012-10-25
      • 2014-03-04
      • 1970-01-01
      • 2021-12-12
      相关资源
      最近更新 更多