У меня есть простой SPA-сервис с бризом/нокаутом. Мне пришлось реализовать опцию «single save» для списка сущностей - редактирование должно было быть сделано в списке не в отдельном всплывающем окне.субъект клиента breeze, не обновляющийся после изменений на стороне сервера
При сохранении сервера будет проверяться, что были обновлены только определенные attrs объекта, а также обновлена «последняя обновленная дата» attr.
Список сущностей был выведен с сервера одним диспетчером сущностей.
Для включения единого сохранения обновленная и готовая к сохранению сущность экспортировалась из главного диспетчера объектов и импортировалась во временный диспетчер объектов. Сохранение выполняется и (если все в порядке) объект реэкспортируется и импортируется обратно в главный диспетчер объектов.
function saveSingle(entity)
{
var tempMgr = MainEntityManager.createEmptyCopy();
var exp = MainEntityManager.exportEntities([entity]);
tempMgr.importEntities(exp, {
mergeStrategy: breeze.MergeStrategy.PreserveChanges });
tempMgr.saveChanges()
.then(function (saveResult) {
var reImp = tempMgr.exportEntities();
MainEntityManager.importEntities(reImp);
entity.Last_Updated_Date(saveResult.entities[0].Last_Updated_Date());
entity.entityAspect.entityState = breeze.EntityState.Unchanged;
logger.success("changes saved");
})
.fail(function() {
logger.error("Single Save failed: " + error.message);
});
}
Однако, похоже, что новое значение «последняя дата обновления» не копируется через после сохранения в ре-экспорте/импорте обратно в процесс MainEntityManager. Я работал над этим, но мне интересно, если я сделал что-то не так в этой реализации и есть ли лучший способ создать функцию сохранения одного объекта?
Комментарии и вопросы приветствуются!