是否可以使用ember.js定期通知观察者计算属性?

时间:2013-01-09 10:04:29

标签: ember.js

我正在尝试实现以下简单用例:让ember模板定期显示当前时间。我找到了一种方法,但我怀疑有更好/更简单的方法。这是我的工作:

  1. 在我的控制器中,我有一个dirtyFlag属性。我用这个作为触发观察者通知的技巧(因此我的模板)。

  2. 当应用程序准备就绪时,我启动计时器以定期更改 dirtyFlag属性的值。

  3. 我想避免使用dirtyFlag属性,基本上我想知道是否有一种方法可以表达类似的所有观察者对currentTime计算属性应该更新并获取此属性的新值

    var App = Ember.Application.create({
        ready: function() {
            setInterval(function() {
                console.info("Updating clock (" + new Date() + ")");
                App.theClockController.set('dirtyFlag', new Date());    
            }, 1000)
        }
    });
    
    App.ClockController = Ember.ObjectController.extend({
        dirtyFlag: null,
        currentTime: function() {
            return new Date();
        }.property('dirtyFlag')
    });
    

2 个答案:

答案 0 :(得分:2)

我建议使用标准属性来存储缓存的时间值,然后根据需要绑定到它。例如:

App = Ember.Application.create({
  ready: function() {
      setInterval( function() {
            console.info("Updating clock (" + new Date() + ")");
            App.set('currentTime', new Date());
      }, 1000)
  }
});

App.ClockController = Ember.Controller.extend({
  currentTimeBinding: Ember.Binding.oneWay('App.currentTime')
});

请参阅此jsfiddle以获取一个工作示例:http://jsfiddle.net/nzLyh/1/

答案 1 :(得分:0)

我找到了另一种方法(不确定它是最好的)。我调用propertyWillChange和propertyDidChange方法:

var App = Ember.Application.create({
    ready: function() {
        console.info("Preparing the timer...");
        setInterval(function() {
            console.info("Updating clock (" + new Date() + ")");
            App.theClockController.propertyWillChange('currentTime');
            App.theClockController.propertyDidChange('currentTime');
        }, 1000)
    }
});