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'});
アドバイスをいただければ幸いです。