我正在使用 ember-data 从 API 获取数据(仅使用find
方法)。数据会定期从服务器刷新。提交操作在 ember-data 之外处理。
但是,当更改属性时,记录被标记为uncommitted
并且无法在下一个find
请求中刷新,因为它需要处于loaded.saved
状态。
是否有任何方法可以强制记录在loaded.saved
属性更改时保留?
我正在使用 ember-data 从 API 获取数据(仅使用find
方法)。数据会定期从服务器刷新。提交操作在 ember-data 之外处理。
但是,当更改属性时,记录被标记为uncommitted
并且无法在下一个find
请求中刷新,因为它需要处于loaded.saved
状态。
是否有任何方法可以强制记录在loaded.saved
属性更改时保留?
我做了一些与此类似的事情。试试这个。未经测试的代码!
覆盖 DS.Model 上的 init 方法,并为 DS.Model 上的每个属性添加一个观察者。观察者委托一个回调来强制你的模型状态返回“loaded.saved”
App.YourModel = DS.Model.extend({
init: function(){
this._super();
this.eachAttribute(function(attributeName){
this.addObserver(attributeName, this, this.revertToLoadedSavedState);
}, this);
},
revertToLoadedSavedState: function() {
//hackity hack
this.get('stateManager').transitionTo('loaded.saved');
}
}
如果可行,您的模型将持续处于“loaded.saved”状态。但是,当您加载实体实例时,观察者的数量将会失控地增加。
也许您可以在从服务器刷新之前迭代您的脏模型并使用 stateManager 强制每个脏实例进入“loaded.saved”状态。