Ember.js 忽略数据中已更改的记录
您如何可以忽略在带有余烬数据的余烬JS视图中更改的记录? 类似于delete,但不从持久存储中实际删除它 我想Ember.js 忽略数据中已更改的记录,ember.js,ember-data,Ember.js,Ember Data,您如何可以忽略在带有余烬数据的余烬JS视图中更改的记录? 类似于delete,但不从持久存储中实际删除它 我想App.store.removeFromRecordArrays(record)将起作用。1)您可以使用事务并回滚该事务 2) 或者,您可以使用记录的statemanager回滚记录 if(record.isDirty) record.get('transaction').rollback(); 例如,您可以循环存储记录缓存中的所有记录,并回滚所有脏记录 我个人在视图中的willD
App.store.removeFromRecordArrays(record)代码>将起作用。1)您可以使用事务并回滚该事务
2) 或者,您可以使用记录的statemanager回滚记录
if(record.isDirty)
record.get('transaction').rollback();
例如,您可以循环存储记录缓存中的所有记录,并回滚所有脏记录
我个人在视图中的willDestroyElement事件上使用记录回滚机制,因此如果用户离开视图,他将被要求保存脏记录
PatientTransport.FirmView = Ember.View.extend({
templateName: 'firm-view',
willDestroyElement: function() {
if (this.getPath('controller.content.isDirty')) {
var self = this;
Bootstrap.ConfirmBox.popup({
heading: "Some data has changed.",
message: "Do you want to save changes?",
callback: function(options, event) {
if (options.primary) {
self.getPath('controller.content.transaction').commit();
} else {
self.getPath('controller.content.transaction').rollback();
}
}
});
}
}
});
如果此模型存在这种情况(已删除客户端但不删除服务器端),则可以使用标志扩展DS.Model。此外,还有一种方法可以方便地设置此状态(调用model.deleteLocal())
然后需要在适配器中自定义deleteRecords方法
DS.YourAdapter.reopen({
deleteRecord: function(store, type, model) {
if (!model.get('deleteLocalFlag') {
// code for deleting in persitence layer
}
store.didDeleteRecord(model, model.toJSON({associations: true}));
}
});
警告:此代码未经测试,但在我的头脑中工作;)
可能更干净的解决方案是使用对象的stateManager并转换到不同的状态,而不是设置标志。但是我发现stateManager周围的代码很难理解,可能不值得这么麻烦。我想你可以使用commit
解决方案,类似于我第一次找到记录时使用的:record=App.store.findQuery(recordClass,query)
,然后我对记录执行修改,有时在我更改属性后,我想忽略这些更改。我不能使用事务在持久层中查找某些内容,就好像它们创建了一个全新的存储。你能Em.copy
该记录吗,这样你就不会接触你的收藏?然后,编辑完成后,可以将其合并回集合中的记录,也可以将其丢弃。我在我的编辑场景中做了类似的事情(尽管我仍然没有使用ember data atm)
DS.YourAdapter.reopen({
deleteRecord: function(store, type, model) {
if (!model.get('deleteLocalFlag') {
// code for deleting in persitence layer
}
store.didDeleteRecord(model, model.toJSON({associations: true}));
}
});