假设我有一个变量标题,它运行一个像下面这样的观察者。
Ember.Route.reopenClass({
title: 'Ember Application',
_titleDidChange: function(){
console.log('Title Updated');
}.observes('title')
});
因此,无论何时创建路线并设置新标题,我都希望其观察者能够运行。但它没有发生。
App.IndexRoute = Ember.Route.extend({
title: 'index Route',
model: function() {
return ['red', 'yellow', 'blue'];
}
});
应该怎么做才能使这个功能像我想要的那样工作?
这是jsbin链接
http://emberjs.jsbin.com/neges/1/edit
更新: ok ..我从EmberJS github找到了一些东西。他们已经尝试以相同的方式实现标题,但需要在ember.js中进行更改,这对我来说不是一个选项。任何简单的方法https://github.com/emberjs/ember.js/pull/3689/files#r9367594
答案 0 :(得分:2)
这个怎么样:
App = Ember.Application.create();
Ember.Route.reopen({
title: 'Ember Application',
_titleDidChange: function(){
console.log('Title Updated: ' + this.get("title"));
}.observes('title').on("init")
});
App.IndexRoute = Ember.Route.extend({
title: 'index Route'
});
需要进行两项重要更改才能使您的代码正常工作:
reopenClass
切换到reopen
。 reopenClass
用于向类本身添加静态属性,而不是其实例。on("init")
,这将确保在对象初始化期间触发属性更改事件,这正是您所需要的。更新后的jsbin为here。