我在我的Ember应用程序中实现了一个定期自动保存功能,如下所示:
var App = Ember.Application.create({
ready: function () {
setInterval(function() { App.store.commit(); }, 10000);
}
});
它运行良好,定期刷新服务器的所有更改。但是我如何能够参与到这个事件中,以便我可以直观地指出它正在发生在用户身上?
我不能只把它放在'ready'事件处理程序中,因为大多数时候App.store.commit()实际上都没有任何工作要做,即使它确实如此,它也是异步发生的 - commit( )在生成请求之前立即返回。
答案 0 :(得分:3)
这是真的commit
没有表明它的进展。设置didCreate
&模型上的didUpdate
回调会将更改通知注入您的应用。
Ember-Data事务模型的本质意味着在请求commit
时会发生很多事情。您的回调通知可能需要合并或限制为合理的面向用户的消息。
DIY替代方案:创建一个isSaving属性& afterSave observer
在您的控制器上,使用计算属性&观察您观察isSaving
州的特定数据模型:
// Example of a data model with a belongsTo association & nested hasMany
isSaving: function() {
return this.get('isSaving') || (
!Ember.empty(this.get('association')) && (
this.get('association.isSaving') ||
this.get('association.nestedAssociation').some(function(item) { return item.get('isSaving'); })
)
);
}.property("isSaving", "association.isSaving", "association.nestedAssociation.@each.isSaving"),
afterSave: function() {
if (this.get('isSaving')) return;
// do something interesting
}.observes('isSaving')
与ember-data中的通用全局isSaving
或isInFlight
状态相比,这是一个脏点,但它在实践中效果很好。