breezejs:拒绝对特定属性的更改

时间:2014-05-23 21:39:51

标签: javascript breeze

是否可以拒绝对breeze对象的单个属性的更改而不拒绝对该对象的所有更改?

说我有

// assume manager is an EntityManager containing a number of preexisting entities. 
var person = manager.createEntity("Person");
// assume Name and House are valid properties of a Person object
person.Name("Jon Snow");
person.House("Lannister");

但我想要放弃对对象House属性所做的更改。

这是否可能,如果是这样,我将如何去做呢?

注意:我宁愿不迭代originalValues属性,只需替换它们。我想,我正在寻找更优雅的解决方案,比如......

person.House.rejectChanges();

在属性本身或类似的东西上调用rejectChanges()

2 个答案:

答案 0 :(得分:2)

由于缺乏更好的解决方案,我提出了以下代码,似乎符合我的目的:



function RevertChangesToProperty(entity, propertyName) {
  if (entity.entityAspect.originalValues.hasOwnProperty(propertyName)) {
    var origValue = entity.entityAspect.originalValues[propertyName];

    entity.setProperty(propertyName, origValue);
    delete entity.entityAspect.originalValues[propertyName];

    if (Object.getOwnPropertyNames(entity.entityAspect.originalValues).length === 0) {
      entity.entityAspect.setUnchanged();
    }
  }
}




答案 1 :(得分:0)

如果person.House媒体资源有 entityAspect ,您可以在此媒体资源的entityAspect上调用rejectChanges()。如果属性是对象,则属性具有entityAspect,具有其他属性。像string或Int这样的简单类型没有entityAspect,简单类型的属性只属于另一个对象

person.House.entityAspect.rejectChanges()