2

現在、計算されたゲッター xyz があります。新しい計算をスケジュールするには、 を呼び出しますnotifyProperty(this, #xyz);

observeの最新バージョンでは、notifyProperty非推奨です。どうすれば交換できますか?ドキュメントは、使用することを提案していますthis.notifyPropertyChange(#xyz, oldValue, newValue);。問題は、ゲッターが計算されるため、 oldValue(直接ではない)を持っていないことです。newValue

4

1 に答える 1

4

開発者からの提案は、oldValue参照用にアラウンドをプライベート変数に保持することです。に関しては、newValue実際にはゲッターを渡すだけで、新しい値で計算されます。

次のようなクラスが表示されます。

class MyElement extends Observable {
  @observable var foo, bar;
  var _oldValue;
  @reflectable get xyz => foo + bar;

  MyElement() {
    // we use the xyz getter to compute its own new value
    // notifyPropertyChange returns the new value for convenience :)
    notifyXyz() { _oldValue = notifyPropertyChange(#xyz, _oldValue, xyz); }
    onPropertyChange(this, #foo, notifyXyz);
    onPropertyChange(this, #bar, notifyXyz);
  }
}
于 2013-10-23T18:12:16.553 に答える