每当设置active
属性时,我都有以下视图来显示选中的标记:
App.ActiveEntryView = Ember.View.extend({
render: function(buffer) {
var active = this.get('active'), icon;
if (active) {
icon = 'fa fa-check';
} else {
icon = '';
}
return buffer.push(icon);
}
});
但如果active
属性发生变化,则不会重新渲染。这在我的模板中绑定如下:
{{#each model}}
<tr class="odd-even">
....
<td>{{view App.ActiveEntryView activeBinding="parked"}}</td>
....
</tr>
{{/each}}
其中parked
是我要评估的模型的属性。但是,只要该属性在模型中发生更改,就不会重新呈现视图。我试过添加一个观察者:
App.ActiveEntryView = Ember.View.extend({
render: function(buffer) {
var active = this.get('active'), icon;
if (active) {
icon = 'fa fa-check';
} else {
icon = '';
}
return buffer.push(icon);
}.observes('active')
});
但后来我收到了一个错误:
Uncaught TypeError: undefined is not a function
参考这一行:
return buffer.push(icon);
我猜观察者会触发渲染函数传递的参数不同于buffer
。
如何重新渲染视图呢?
答案 0 :(得分:0)
我对视图知之甚少,但据我所知,这不是重新渲染的方法。具体来说,render
是系统在需要呈现模板时调用的钩子。自己调用钩子不会强制系统重新渲染模板,这必须在更高级别完成。
话虽如此,可能有一种方法可以强制重新渲染整个视图,但对于大多数问题而言,这似乎不是一个好的解决方案。我看到你正在用图标做一些事情,所以我会在不知道你的整个问题的情况下采取疯狂的方法。如果您发布更多详细信息,我可能会帮助您更多。
据我所知,当active
属性发生变化时,您似乎正在尝试更改视图中元素的图标。以下是您可以这样做的方式:
在您的视图模板中:
<i {{bind-attr class='view.active:fa view.active:fa-check'}}></i>
您可以查看有关绑定类名here的更多详细信息。