2

オブジェクト プロパティまたはプロパティの通知を一時的に無効にする簡単な方法はありますか?

beginPropertyChanges()and でそれらを延期できることは知っていますがendPropertyChanges()、明示的に有効にするまで、これらの変更をまったく通知したくありません。

前もって感謝します。

ユースケース:オブジェクト ( ) のプロパティAを別のオブジェクト ( ) で設定する必要がありますB。のプロパティはB、他のオブジェクトのいくつかのメソッドによって監視されています。ある時点で、Bオブジェクトのデータがクリアされ、オブザーバーに通知されます。その後、HTTP 応答によってオブザーバーに何か有用なものが設定されます。プロパティ値がその時点で有効ではないため、オブジェクトをクリアするときにオブザーバーに通知されたくありません。

4

3 に答える 3

2

Ember は通知の一時停止をサポートしていません。上記のコメントで言及されているプラ​​イベート API をいじらないことを強くお勧めします。

HTTP リクエストの前にオブジェクトのデータをわざわざクリアするのはなぜですか? 奇妙に思えます。

于 2012-06-03T08:29:13.353 に答える
1

フラグを使用すると、computed が引き続きトリガーされます。

私が思いついた最善の方法は、計算されたものを最後の既知の値でオーバーライドすることです。計算されたプロパティ定義を再度設定することで、後で有効にすることができます。

let _myComputedProperty = Ember.computed('foobar', function() {
  let foobar = this.get('foobar');
  console.log('myComputedProperty triggered >', foobar);
  return '_' + foobar + '_';
});

Controller.extend({
  turnOffComputed: function() {
    let myComputedProperty = this.get('myComputedProperty');
    this.set('myComputedProperty', myComputedProperty);
  },

  turnOnComputed: function() {
    this.set('myComputedProperty', _myComputedProperty);
  }
})

完全な例:計算されたプロパティの条件付きバインディング

于 2016-08-16T05:46:53.437 に答える