我在 Ember-1.0.0-pre2 上,我似乎在使用 {{#if}} 语句围绕具有 {{bindAttr class="..."}} 且绑定条件为的元素时遇到问题相同。IE if 语句和类绑定到相同的控制器属性。见代码:
<button {{action "toggleShow" target="controller"}}>Toggle Visibility</button>
{{#if show}}
<div {{bindAttr class="show:red:green"}}>test</div>
{{/if}}
如果您多次单击“切换可见性”按钮,您会注意到一个常见错误:“您所做的某些事情导致视图在渲染后但在插入 DOM 之前重新渲染。因为这是可以避免并且导致应用程序中出现重大性能问题的原因,这种行为已被弃用......”
乍一看似乎很愚蠢,但这是我的问题的一个非常原始的例子。就我而言,两个绑定(if 和 class 属性)的末尾都有一个计算属性。在这两种情况下,计算属性共享一个公共依赖键。当该公共依赖键更改时,它会导致两个助手都被更新,从而导致错误。
这是一个错误吗?我可以猜到这里发生了什么,但似乎我应该能够安全地做到这一点。
编辑:以上是 我遇到的问题的一个原始示例。 它旨在以非常简单的方式显示它。下面是一个更复杂的例子。
模板:
<button {{action "toggleValue" target="controller"}}>Toggle Value</button><br>
{{#if greaterThanTen}}
<div {{bindAttr class="isOdd:red:green"}}>test</div>
{{/if}}
Javascript:
App.myController = Ember.Controller.create({
value: 10,
greaterThanTen: function() {
return this.get('value') > 10;
}.property('value'),
isOdd: function() {
return this.get('value') % 2 === 1;
}.property('value'),
toggleValue: function() {
this.set('value', (this.get('isOdd') ? 10 : 11));
}
});