0

次の簡単なユースケースを実装しようとしています。残り火のテンプレートに現在の時刻を定期的に表示させます。私はそれを行う方法を見つけましたが、より良い/より簡単な方法があるのではないかと思います。これが私がすることです:

  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 に答える