如果保存操作出错,我需要恢复 Breeze Entity 的旧状态。
我还没有找到复制微风实体的方法?,当我使用 angular.copy 时,我得到一个循环引用异常“TypeError:将循环结构转换为 JSON”
我已经用 Douglas crockford 的实现 cycle.js 尝试过,但我无法取回相同的对象
如果保存操作出错,我需要恢复 Breeze Entity 的旧状态。
我还没有找到复制微风实体的方法?,当我使用 angular.copy 时,我得到一个循环引用异常“TypeError:将循环结构转换为 JSON”
我已经用 Douglas crockford 的实现 cycle.js 尝试过,但我无法取回相同的对象
如果保存操作失败,则客户端状态仍将是“添加”、“修改”或“删除”。仅当保存成功时才接受更改。这允许您在“更正”问题后“重新保存”相同的实体或实体,而无需重新组合更改。
您还可以使用 Breeze EntityAspect.rejectChanges将实体返回到上次查询时的状态。
复制实体的最简单方法是使用 Breeze EntityManager.createEntity方法并传入一个仅包含源实体的数据属性的对象。这会起作用的原因是,一旦新实体附加到 entityManager,Breeze 将根据外键数据属性自动为您链接所有导航属性,这在内部作为 createEntity 调用的最后一步发生。
所以你可能会尝试这样的事情(我实际上并没有测试这个代码片段,但这种方法确实有效。
function cloneEntity(sourceEntity, keyName, newKeyValue) {
var sourceEntityType = sourceEntity.entityType;
var sourceDataProperties = sourceEntityType.dataProperties;
var configEntity = {};
sourceDataProperties.forEach(function(dp) {
configEntity[dp.name] = sourceEntity.getProperty(dp.name);
});
// you will need to give the entity a unique key before calling createEntity
// you could also get the keyName from metadata but I was too lazy to do that here.
configEntity[keyName] = newKeyValue;
var cloneEntity = myEntityManager.createEntity(fooEntityType, configEntity, breeze.EntityState.Added);
return cloneEntity;
}
您是否尝试过使用EntityAspect.rejectChanges()?
通过拒绝自上次查询实体并调用了“rejectChanges”以来对其所做的所有更改,将实体返回到“未更改”的 EntityState。