0

Ember.js では、次のシナリオがあります。

私のクラスには、インスタンス化時に何らかの操作が必要なプロパティがあります。それを実現するために、init から作業を行う関数を呼び出しています。また、このプロパティの変更を観察したいので、コンシューマーが実行時に新しい値を設定する場合、新しい値に対して操作ロジックを実行します。問題は、初期化フローの一部として、操作後にプロパティに新しい値を設定していて、これがトリガーを呼び出すことです (予想どおり)。このコードを 2 回実行したくありません。

次のコードを検討してください。「here」がコンソールに 2 回出力されます。

    var MyObj = Ember.Object.extend({

        prop: null,

        init: function init() {

            this._super.apply(this, arguments);
            this._applyProp();

        },

        _applyProp: function prop() {

            console.log('here');

            var prop = this.get('prop');

            if (prop === 'Dan') {

                prop = 'Hi' + prop;
            }

            this.set('prop', prop);

        }.observes('prop')

    });

    MyObj.create({prop: 'Dan'});

アドバイスをいただければ幸いです。

4

1 に答える 1

3

監視しているプロパティを設定するオブザーバーを持つことは、悪い考えのように思えます。特定の例は、計算されたプロパティのゲッター/セッターを使用して実現できます。

var MyObj = Ember.Object.extend({
  prop: function(key, value) {
    if (value !== undefined) {
      if (value == 'Dan') {
        return 'Hi ' + value;
      }
      return value;
    }
  }.property(),
});
MyObj.create({prop: 'Dan'});

これはユースケースをカバーするのに十分でしょうか?

于 2012-11-15T05:38:48.827 に答える