У меня есть небольшой и вполне стандартное приложение, которое:EmberJS: можно ли сохранить только измененные объекты?
- распаковывает объектов с сервера
- Визуализирует объектов и позволяет некоторое редактирование на них. Если это важно, это редактирование влияет только на атрибуты
DS.hasMany
. - Предложение спасительного обратно на сервер (это не должно происходить автоматически, только по запросу пользователя)
Контроллер приложения обрабатывает save
события, и там я храню вещи. Код выглядит так:
import Ember from 'ember';
export default Ember.Controller.extend({
actions: {
save() {
this.store.peekAll('object').forEach(obj => {
obj.save();
});
}
}
});
Это вызывает запрос PUT для каждого локально загруженного объекта. Он отлично работает, но это немного грубая сила. Вместо этого я хотел бы сохранить только измененные объекты.
Я попытался с dirtyType, но он возвращает undefined
внутри .forEach
, а также hasDirtyAttributes, но он возвращает false
всегда.
Я мог бы создать свой собственный кеш измененных объектов, но это было бы большой труд и склонность к ошибкам. Есть ли стандартный способ справиться с этой ситуацией? заранее спасибо.
Привет, это не то, что мне нужно. Я думаю, что это свойство isDirty является истинным, когда объект еще не синхронизирован с локальным хранилищем (т. Е. Ожидает цикл события). В моем случае, когда пользователь нажимает на сохранение, все объекты были локально синхронизированы, а 'isDirty' всегда false. Мне нужно, чтобы определить, был ли объект локально изменен с момента загрузки. – bgusach
@ ikaros45 Нет, это определенно, когда объект был изменен. Если вы это сделаете: setTimeout (function() {if (obj.get ('isDirty')) {console.log («Я грязный»);}}, 1000); объект будет по-прежнему грязным, т. Е. не ожидая eventloop. –
@ ikaros45 Причина, по которой вы, возможно, не видите этого, потому что ember не поддерживает 'isDirty' на отношениях (пока). http://stackoverflow.com/a/32014670/29347 –