如何使用Ember Data忽略您在EmberJS视图中更改的记录? 像删除一样,实际上没有从持久存储中删除它。
我认为App.store.removeFromRecordArrays(record);
会起作用。
答案 0 :(得分:0)
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();
}
}
});
}
}
});
答案 1 :(得分:0)
如果此模型存在此情况(已删除客户端但不删除服务器端),则可以使用标志扩展DS.Model。另外,方法可以方便地设置此状态(调用model.deleteLocal())。
DS.Model.reopen({
deleteLocalFlag: false,
deleteLocal: function () {
this.set('deleteLocalFlag',true);
this.deleteRecord();
}
});
然后您需要在适配器中自定义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周围的代码很难理解,可能不值得麻烦。