0

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

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

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

我想避免使用 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')
});
4

2 回答 2

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/

于 2013-01-09T13:50:29.330 回答
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)
    }
});
于 2013-01-09T10:27:18.073 回答