EmberJS ビューで Ember Data を使用して変更したレコードを無視するにはどうすればよいですか? 永続ストレージから実際に削除せずに削除するようなもの。
うまくいくと思いApp.store.removeFromRecordArrays(record);
ました。
EmberJS ビューで Ember Data を使用して変更したレコードを無視するにはどうすればよいですか? 永続ストレージから実際に削除せずに削除するようなもの。
うまくいくと思いApp.store.removeFromRecordArrays(record);
ました。
このケース (クライアント側を削除し、サーバー側を削除しない) がこのモデルに存在する場合は、フラグを使用して 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 の周りのコードを理解するのは非常に難しく、おそらく手間をかける価値はないと思います。
1) トランザクションを使用して、トランザクションをロールバックできます。
2) または、statemanager を使用してレコードをロールバックすることもできます。
if(record.isDirty)
record.get('transaction').rollback();
たとえば、ストア recordCache 内のすべてのレコードをループし、ダーティ レコードをロールバックできます。
ビューの 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();
}
}
});
}
}
});