如何在路线延长时在路线上运行观察员?

时间:2014-04-17 02:28:01

标签: ember.js

假设我有一个变量标题,它运行一个像下面这样的观察者。

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

1 个答案:

答案 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切换到reopenreopenClass用于向类本身添加静态属性,而不是其实例。
  • 添加了on("init"),这将确保在对象初始化期间触发属性更改事件,这正是您所需要的。

更新后的jsbin为here