2013-10-29 53 views
0

我正在使用Breezejs。讓我們說,我有一個可觀察的實體dummy充滿了一些數據。用戶通過html頁面上的輸入框修改了該實體的description屬性。用戶也可能在頁面上的其他輸入框上修改此實體的其他屬性。我的實體的實體狀態此時爲Modified。接下來,我執行一些檢查,並且需要撤消只需修改此description屬性(代碼)。如果我的實體中的唯一修改取消,我的entityState將變爲未更改

如果這是唯一的修改話,我想有我entityState成爲Unchanged

如果有這個實體的其它修改那麼我想,讓他們爲是,只有撤消description財產。

爲什麼我需要那個?當頁面上有一些掛起的修改時,我會顯示SaveCancel按鈕。如果只有1次修改,我撤消它,那麼啓用SaveCancel按鈕就不是邏輯。

可能嗎?

謝謝。


UPDATE

這是我的實際執行情況:

private tryReject() { 
    // if any modified values are the same as original values >> reject 
    var rejectPossible = true; 
    for (var name in this.dummy().entityAspect.originalValues) { 
     var oldVal = this.dummy().entityAspect.originalValues[name]; 
     var newVal = this.dummy()[name](); 
     if (oldVal != newVal) rejectPossible = false; 
    } 
    if (rejectPossible) this.dummy().entityAspect.rejectChanges(); 
} 

也許有這樣的聰明或更清潔的方式?

回答

2

Breeze中的每個實體都具有帶「originalValues」映射的「entityAspect」屬性。因此,對於任何實體,您都可以查看originalValues映射,並且只需撤消一個屬性或全部屬性即可。像這樣(未經測試)。

var originalValues = myEntity.entityAspect.originalValues; 
if (originalValues.hasOwnProperty("description") { 
    if (Object.keys(originalValues).length === 1) { 
     // this is the only change - so just reject everything - state will become "Unchanged" as a result. 
     myEntity.entityAspect.rejectChanges(); 
    } else { 
     // else just reverse this single property 
     myEntity.setProperty("description", originalValues["description"]); 
    } 
} 

希望這有助於!

相關問題