これは古い質問ですが、Google検索ではオブザーバーを中止しているようですが、コメントしたいと思います。
このような機能の使用例は明らかです。たとえば、オブジェクトの列挙型プロパティはリストボックスで表され、オブジェクトが変更される可能性があります。リストボックスを使用してサーバーからプロパティの変更を要求し、成功した場合に新しい値を設定する場合は、リストボックスでコントローラープロパティを使用し、オブジェクトが変更されたときにそのプロパティをオブジェクトプロパティに設定するそれを観察してサーバーに要求を出します。この場合、オブジェクトが変わるたびにオブザーバは望ましくない通知を受け取ります。
しかし、私はこれらのユースケースが非常に多様であるため、Emberがそれらをサポートできる方法がないことに同意します。
したがって、可能な回避策は、コントローラで変数を宣言して、プロパティを変更するたびに、ユーザーが行った変更のみに反応するように、それを使用することです:
doNotReact: false,
updateManually: function() {
this.doNotReact = true;
Ember.run.scheduleOnce('actions', this, function() {
this.doNotReact = false;
});
............
this.set('something', somevalue);
............
},
onChange: function() {
if (this.doNotReact) return;
...............
}.observes('something')
doNotReactの価値ます観察者が走る機会を得た後にリセットする。観察者のストッパー変数をリセットすることはお勧めしません。なぜなら、ストッパー変数は、既にプロパティーと同じ値に設定した場合には実行されないためです。
はあなたが具体的な例を与えることができますか?あなたの特定のユースケースは何ですか? – pangratz
私はそこにいるとは思わない。オブザーバーのソースを確認してください:https://github.com/emberjs/ember.js/blob/master/packages/ember-metal/lib/observer.js。私は完全に理解していないが、すべてのことはまだ動作しますが、あなたが知る必要があるすべてがそこにあるように見えます。具体的には、 'Ember._suspendObserver'と' Ember。_suspendListener'、あるいはおそらく 'Ember.removeObserver'です。 –