我正在编写一个Ember应用程序,该应用程序允许用户修改数据并自动提交对后端的更改,而无需单击任何" Save"按钮。我在这段代码中遇到了一个奇怪的问题
record.set(key, newValue);
record.get('store').commit();
在将记录添加到commit()
存储桶之前,首先调用updated
方法。如果我推迟commit()
record.set(key, newValue);
setTimeout(function() {
record.get('store').commit();
}, 1);
它的效果非常好,但在Ember做事并不合适。是否有任何事件通知何时可以保存记录?
答案 0 :(得分: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/
另请参阅此处了解demo(它还有其他一些内容,但请关注Author
模型以及如何设置观察者,同时还要PostController
和{ {1}}中的函数)在作者姓名下方的输入字段中输入内容,然后按update
按钮,现在观看控制台日志。
希望它有所帮助。