2012-04-13 88 views
3

我有一種編輯器可以放棄對其屬性所做的更改嗎?這在客戶端。沒有殘餘。GWT編輯器如何丟棄更改

我:

public class ClaseEditor extends PopupPanel implements Editor<ClaseProxy> { 
    @UiField ValidatedTextBox tema; 
    @UiField ValidatedTextBox catedratico; 
} 

我使用這個編輯器在ListEditor如u知道你

ListEditor<ClaseProxy, ClaseEditor> 

如果用戶創建一個,它的還好有編輯列表,那麼如果用戶編輯它。我有一個保存或取消選項,我保存好,只需隱藏編輯器,所做的更改都可以。

但在用戶單擊取消,如果在屬性上有一些更改編輯器刷新(lazely),更改爲代理。

是的,我可以將起始值存儲在一個字符串,然後用setValue()恢復在texboxes上。但是還有其他一些方法(編輯器API)阻止了這一點?

謝謝

回答

0

是的。在取消按鈕上,執行一個fire()而不會建立任何請求。編輯器從不影響原始代理,它是不可變的。刷新只會給你一個副本(除非你使用的是RequestFactoryEditorDriver,那麼它會返回你發送到driver.edit(proxy,ctx)的上下文。沒有請求的fire()會清除編輯代理副本,如果用戶想再次編輯它不會如果您使用的是SimpleBeanEditorDriver得到,它已經被editted錯誤。

+0

EditorDriver.flush()不返回與SimpleBeanEditorDriver副本,它要求所有subeditors到刷新它們的變化返回到原來的對象。或者我誤解了'給你一個副本'的意思? – 2012-04-13 18:35:05

+0

在簡單的bean驅動程序中,刷新爲您提供了代理的可編輯副本。原始代理與您第一次檢索代理時相同。術語沖洗使得它看起來像它可以將編輯後的變化刷新回原始代理,但它不會。 – Deanna 2012-04-13 18:57:42

+0

SimpleBeanEditorDriver不承擔代理服務器,因此它可以在普通的bean上使用,這意味着它不能複製它所使用的模型。 RequestFactoryEditorDriver在將值傳遞給編輯器之前確實會運行context.edit - 也許您正在考慮這一點? – 2012-04-13 22:03:37

0

,你可以做的edit方法一個新的呼叫,而無需調用flush第一。

SimpleBeanEditorDriver類從豆讀入編輯edit,編輯轉入豆瓣flush

如果您不想恢復所有編輯人員,但只有其中一人,請記得在每次接受的編輯人員更改時致電flush,以便能夠恢復到最後的flush點。請注意,flush調用是本地調用,不一定必須與對持久層的調用相對應。

實施例代碼

private Bean currentObject; 

/** 
* Start editing the given object. 
*/ 
public void edit(Bean object) { 
    this.currentObject = object; 
    this.driver.edit(object); 
} 

/** 
* Call this every time an editor is in a consistent state. 
* (e.g. onBlur event if validation succeeds) 
*/ 
private void save() { 
    this.driver.flush(); // saves editors' state into currentObject 
} 

/** 
* Call this to cancel changes on all editing editors. 
* (e.g. onBlur event if validation fails) 
*/ 
private void revert() { 
    this.driver.edit(currentObject); // reloads currentObject into editors 
} 

/** 
* Stores all pending changes to the server. 
* Remember to validate all editors. 
*/ 
public void commit() { 
    Bean object = this.driver.flush(); 
    Server.persist(object); 
}