6

是否可以检测到可观察对象何时以任何方式发生变化?

例如,假设你有这个:

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

稍后,随着一些用户输入,值会发生变化。我怎样才能轻松检测到这一点?

我想添加一个全局“保存”按钮,但只有在该可观察对象自初始加载后发生更改时才使其可点击。

我当前的解决方案是添加另一个myObjectChanged返回 true/false 的 observable,只要组件更改 myObject 中的数据,我还会添加一行将 myObjectChanged 更改为 true。如果单击保存按钮,它会保存并将 observable 更改回 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 回答