6

オブザーバブルが何らかの形でいつ変化したかを検出することは可能ですか?

たとえば、これがあるとします:

@observable myObject = [{id: 1, name: 'apples'}, {id: 2, name: 'banana' }]

その後、ユーザー入力によって値が変化します。これを簡単に検出するにはどうすればよいですか?

グローバルな「保存」ボタンを追加したいのですが、最初のロード以降にオブザーバブルが変更された場合にのみクリック可能にします。

私の現在の解決策は、true/false を返す別のオブザーバブルを追加することmyObjectChangedです。また、コンポーネントが myObject のデータを変更するたびに、myObjectChanged を true に変更する行も追加します。保存ボタンをクリックすると、そのオブザーバブルが保存され、false に戻されます。

これにより、全体に散りばめられた多くの余分なコード行が発生します。それを行うためのより良い/よりクリーンな方法はありますか?

4

2 に答える 2

2

これを達成するために使用できますautorun

@observable myObject = [{id: 1, name: 'apples'}, {id: 2, name: 'banana' }]
@observable state = { dirty: false }

let firstAutorun = true;
autorun(() => {
  // `JSON.stringify` will touch all properties of `myObject` so
  // they are automatically observed.
  const json = JSON.stringify(myObject);
  if (!firstAutorun) {
    state.dirty = true;
  }
  firstAutorun = false;
});
于 2016-10-12T06:38:34.803 に答える
0

myObject にプッシュして myObjectChanged を設定するアクションを作成します。

@action add(item) {
    this.myObject.push(item);
    this.myObjectChanged = true;
}
于 2016-10-12T04:44:10.467 に答える