我正在尝试实现以下简单用例:让ember模板定期显示当前时间。我找到了一种方法,但我怀疑有更好/更简单的方法。这是我的工作:
在我的控制器中,我有一个dirtyFlag属性。我用这个作为触发观察者通知的技巧(因此我的模板)。
当应用程序准备就绪时,我启动计时器以定期更改 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')
});
答案 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)
}
});