2014-06-12 65 views
0

enter image description here我有一個GWT表單,它根據選擇的內容改變某些字段。該表格使用編輯器,驅動程序GWT模塊如何在編輯時更改GWT編輯器

故事是編輯她的個人資料並說:「我是用戶」或「我是賣家」(最終「我是其他人」 ) 因此,根據這種自我形式的選擇,我想更改視圖中的一些編輯器(名字,姓氏變成公司名稱,稅號,而許多其他字段保持不變,但改變他們的地方)。我製作了兩套UiBinder屏幕(每個配置文件一個)。我有一個包含複選框「我是一個公司」,處理那些subeditors

什麼,我想我能做到現在爲止主要是UiBinder的我與subeditors

@Path("") 
@UiField 
protected CompanyBasicInfo basicInfoComp; 

@Path("") 
@UiField 
protected PersonBasicInfo basicInfoPers; 

都是一個ValueAwareEditor由駕駛員填充,但只有其中一個可見。

的事情是,我不喜歡在許多編輯相同屬性的想法,無論是表現這種做法可能意味着

另一方面,CompanyBasicInfo和PersonBasicInfo是常規編輯器實現。所以把@Ignore放在它們兩個上是不可能的,因爲當我想要的時候我不能調用setValue()。

也讓它們實現ValueAwareEditor對我來說並不清楚,因爲它包含常規的編輯器小部件,所以我仍然無法在其字段中調用setValue():我只是將問題進一步推進。

在視圖中,我也無法訪問驅動程序再次調用edit()。我看看它是如何在列表中完成的,但有太多新概念,我不認爲我必須學習所有代碼才能夠處理這種簡單的情況。

感謝您的回答

+0

能否請您至少包含ui.xml文件的部分內容以及子編輯器,以便爲您的問題提供更多上下文?它是你試圖編輯的單個大型POJO對象嗎? –

+0

嗨艾米爾, 是的,我正在編輯一個可以託管所有配置文件的大型Pojo。 在我的UiBinder代碼中沒有什麼有趣的地方,它裏面有簡單的字段。什麼是相關的是如何切換和填充UiBinder與數據點播(用戶選擇) 我添加了一個屏幕截圖,以更好地解釋 –

回答

1

由於編輯器框架將與您交付到編輯器的同一對象一起工作,因此您可以在編輯過程中保存添加缺少的部分。

我想,我會嘗試使用OptionalFieldEditor或者ValueAwareEditor和Subeditors的組合來解決它。

主要結構可以是這樣的

public class Person implements Serializable 
{ 
    private CompanyBasicInfo companyInfo; // nullable 
    private PersonBasicInfo personInfo; // nullable 
    private String fooBar; 

    [ ... add getters and setters ... ] 
} 

然後編輯器將實現至少ValueAware

public class PersonEditor implements ValueAwareEditor<Person> 
{ 
    @UiField 
    CompanyBasicInfoEditor companyInfo; 
    @UiField 
    PersonBasicInfoEditor personInfo; 
    @UiField 
    TextBox fooBar; 

    // You may not want to use this, but rather have some other handlers. 
    @UiField 
    Button btnAddPerson; 
    @UiField 
    Button btnAddCompany; 

    @Path("") 
    SimpleEditor<Person> myValue; 

    @Override 
    public void setValue(Person value) { 
     companyInfo.setVisible(value.getCompanyInfo() != null); 
     personInfo.setVisible(value.getPersonInfo() != null); 
    } 

    @UiHandler("btnAddCompany") 
    protected void onAddCompany(ClickEvent ev) { 
     CompanyBasicInfo bci = new CompanyBasicInfo(); 
     myValue.getValue().setCompanyInfo(bci); 
     companyInfo.setValue(bci); // the setValue() function handles the prior unset optional field editor 
    } 

    @UiHandler("btnAddPerson") 
    protected void onAddPerson(ClickEvent ev) { 
     PersonBasicInfo bci = new PersonBasicInfo(); 
     myValue.getValue().setPersonInfo(bci); 
     personInfo.setValue(bci); // the setValue() function handles the prior unset optional field editor 
    } 

[ ... remaining stuff ... ] 
} 

的subeditors應IsEditor<OptionalFieldEditor>。您可以在gwtproject頁面iirc上找到OptionalFieldEditors的樣本。

希望這可以幫助你轉發。

+0

嗨,我處理了這種問題的手動,我忘記了我在的上下文。當生病回到那一部分時,我會看看你的建議。自從你將我介紹給OptionalFieldEditor以來,我對它進行了upvoted,我不知道/嘲笑它(如果我的記憶是正確的) –