我有一个简单的基于微风/淘汰赛的 SPA。我必须为实体列表实现“单一保存”选项 - 编辑将在列表中完成,而不是在单独的弹出窗口中。
保存时,服务器将检查是否仅更新了实体的某些属性,并更新“最后更新日期”属性。
实体列表是由一个实体管理器从服务器中提取的。
为了启用单次保存,已从主实体管理器导出已更新并准备保存的实体并导入到临时实体管理器中。执行保存并且(如果可以的话)对象重新导出并导入回主实体管理器。
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 进程中保存后,新的“上次更新日期”值似乎没有被复制。我已经解决了这个问题,但我想知道我在这个实现中是否做错了什么以及是否有更好的方法来构建“单个实体保存”功能?
欢迎评论和提问!