0

我正在编写一个 Ember 应用程序,它允许用户修改数据并将更改自动提交到后端,而无需单击任何“保存”按钮。在这段代码中我遇到了一个奇怪的问题

record.set(key, newValue);
record.get('store').commit();

在将记录添加到存储桶commit()之前首先调用该方法。updated如果我拖延commit()

record.set(key, newValue);
setTimeout(function() {
  record.get('store').commit();
}, 1);

它工作得很好,但感觉不是在 Ember 中做事的正确方法。是否有任何事件通知记录何时可以保存?

4

1 回答 1

0

它工作得很好,但感觉不是在 Ember 中做事的正确方法。是否有任何事件通知记录何时可以保存?

有一个可以设置观察者的标志,这是isDirty指示记录具有仍未提交的本地更改的属性,例如:

App.MyModel = DS.Model.extend({
  ...
  isDirtyChanged: function() {
    if(this.get('isDirty')) {
      this.get('store').commit();
    }
  }.observes('isDirty')
});

然后调用后:

record.set(key, newValue);

由于isDirtyChanged我们设置了验证isDirty属性并提交是否为真的观察者,因此会自动调用。

您还可以在此处查看更多生命周期事件和属性:http ://emberjs.com/guides/models/model-lifecycle/

另请参阅此处的演示(它还有一些其他内容,但请仅关注Author模型和观察者的设置方式,PostController以及其中的update函数)在作者姓名下方的输入字段中输入内容并按下Update按钮,现在查看控制台日志。

希望能帮助到你。

于 2013-08-25T18:20:00.063 回答