【发布时间】:2012-12-08 10:03:46
【问题描述】:
当 Ember 视图是计算属性时,我在更新模板属性时遇到问题。
当视图首次加载并作为属性返回时,Ember 会正确编译模板,但稍后更改依赖项时模板计算的属性不会更新。
这是 JSFiddle 上的一个示例:http://jsfiddle.net/VkJC3/
App=Em.Application.create();
App.MyView = Em.View.extend({
toggle: true
,template: function(){
if (this.get('toggle')) {
return Em.Handlebars.compile('toggle is true')
} else {
return Em.Handlebars.compile('toggle is false')
}
}.property('toggle')
});
theView= App.MyView.create();
theView.append('body');
Ember.run.later(function() {
console.log('later');
theView.set('toggle',false);
}, 2000);
对于如何完成此任务的任何其他建议表示赞赏。也许最好只将 if 助手放入一个车把模板中。
编辑:
这是一个更完整的示例,展示了包含上述 Ember.View 的 Ember.CollectionView:http://jsfiddle.net/VkJC3/6/
在 Ember.run.later 之后,第一项应该从类型 1 更改为类型 2,并更新计算的模板属性。
App=Em.Application.create();
App.MyView = Em.CollectionView.extend({
content: [
Em.Object.create({type: 1, data:"Maybe item type 1 is a link"})
,Em.Object.create({type: 2, data:"And item type 2 is a header"})]
,itemViewClass: Em.View.extend({
template: function(){
if (this.get('content.type')==1) {
return Em.Handlebars.compile('<a href="#">{{view.content.data}}</a>')
} else if (this.get('content.type')==2) {
return Em.Handlebars.compile('<h1>{{view.content.data}}</h1>')
}
}.property('content.type')
})
});
theView= App.MyView.create();
theView.append('body');
Ember.run.later(function() {
console.log('later');
theView.get('content')[0].set('type',2);
}, 2000);
【问题讨论】:
标签: ember.js