2012-04-13 3 views
3

거기에서 편집자는 속성의 변경 사항을 취소합니까? 클라이언트 쪽. 고집하지 마라.GWT 편집기에서 변경 사항을 버리는 방법

나는이 : 유 편집자의 목록은 사용자가 그 괜찮 하나를 만들려면

ListEditor<ClaseProxy, ClaseEditor> 

경우에가 알고

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

나는 그 때 사용자가 경우 ListEditor에서이 편집기를 사용하여 그것을 편집하십시오. 저장 또는 취소 옵션이 있습니다. 저장을 마치고 편집기를 숨기면 변경 사항이 적용됩니다.

하지만 사용자가 취소를 클릭하면 속성에 대한 변경 사항이 있으면 편집기가 플러시 (lazely)하여 프록시가 변경됩니다.

예 문자열에 시작 값을 저장 한 다음 texboxes에서 setValue()를 사용하여 복원 할 수 있습니다. 그러나 이것을 방지하는 다른 방법 (편집기 API)이 있습니까?

고맙습니다.

답변

0

예. 취소 버튼에서 요청을하지 않고 fire()를 수행하십시오. 에디터가 원래 프록시에 영향을 미치지 않는 것은 불변입니다. flush는 단지 당신에게 사본을 주지만 (RequestFactoryEditorDriver를 사용하지 않는 한 driver.edit(proxy,ctx)으로 보내진 컨텍스트를 반환합니다.) 요청이없는 fire()는 사용자가 다시 편집하려고한다면 편집 프록시 복사본을 지 웁니다. 이미 편집 해되고 있다는 오류가 발생합니다.

+0

EditorDriver.flush는() SimpleBeanEditorDriver와 사본을 반환하지 않습니다, 그것은 원래의 객체에 변경 사항을 플러시 모든 subeditors 요청합니다. 아니면 내가 당신에게 '사본을 주겠다'라는 말을 오해 한 것입니까? –

+0

간단한 bean 드라이버에서 flush는 편집 가능한 복사본을 제공합니다. 원래 프록시는 처음 검색했을 때와 같습니다. flush라는 용어는 편집 된 변경 사항을 원래의 프록시로 플러시 할 수 있지만 그렇게하지는 않는 것처럼 보입니다. – Deanna

+0

SimpleBeanEditorDriver는 일반 Bean에서 사용할 수 있도록 프록시를 가정하지 않으므로 작동하는 모델의 복사본을 만들 수 없습니다. RequestFactoryEditorDriver는 편집자에게 값을 전달하기 전에 context.edit를 실행합니다. 아마도 대신 생각할 것입니다. –

0

을 당신이 SimpleBeanEditorDriver를 사용하는 경우, 먼저 flush를 호출하지 않고 edit 방법에 새 통화를 할 수 있습니다. 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); 
} 
관련 문제