2014-05-23 20 views
2

是否可以拒絕對微風對象的單個屬性的更改而不拒絕對該對象的所有更改?breezejs:拒絕對特定屬性的更改

說我有

// 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

對於缺乏一個更好的解決方案,我想出了下面的代碼,這似乎爲我的目的:

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(); 
 
    } 
 
    } 
 
}

0

如果person.House屬性有一個實體方面,您可以調用rejectChanges()該屬性的entityAspect。屬性具有entityAspect,如果它是具有其他屬性的對象。簡易型像字符串或整數,沒有entityAspect,簡單型的性質只是屬於另一個對象

person.House.entityAspect.rejectChanges() 
+0

我明白,但是,在這種情況下'person.House'是一個簡單的屬性,而不是一個導航屬性有一個'entityAspect'。 – wes

+0

比你可以調用'person.entityAspect.rejectChanges()'。 **或者**如果你真的想恢復簡單類型屬性的原始值,查看人的'entityAspect.originalValues'圖。如果您更改了person.House屬性,則其原始值將出現在'person.entityAspect.originalValues'地圖上。如果你採用這種恢復屬性值的方式,請仔細閱讀這個關於entityState的信息http://www.breezejs.com/documentation/change-tracking –

+1

我知道如何「rejectChanges」。我的問題是拒絕對特定屬性所做的更改,而不使用'originalValues'來完成。我想我希望有一些我還沒有讀過的神奇,超級祕密微風特性。這聽起來像我的問題的解決方案將保持這一點,魔術。感謝您的貢獻。 – wes