1

如果保存操作出错,我需要恢复 Breeze Entity 的旧状态。

我还没有找到复制微风实体的方法?,当我使用 angular.copy 时,我得到一个循环引用异常“TypeError:将循环结构转换为 JSON”

我已经用 Douglas crockford 的实现 cycle.js 尝试过,但我无法取回相同的对象

4

2 回答 2

2

如果保存操作失败,则客户端状态仍将是“添加”、“修改”或“删除”。仅当保存成功时才接受更改。这允许您在“更正”问题后“重新保存”相同的实体或实体,而无需重新组合更改。

您还可以使用 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;
}
于 2013-10-21T22:09:31.217 回答
0

您是否尝试过使用EntityAspect.rejectChanges()

通过拒绝自上次查询实体并调用了“rejectChanges”以来对其所做的所有更改,将实体返回到“未更改”的 EntityState。

于 2013-10-21T14:34:26.567 回答