2013-01-17 5 views
1

Я сейчас пытаюсь привыкнуть к GWT и UiBinder. Но я не могу решить эту проблему. пример, чтобы показать вам, что я имею в виду:uibinder gwt метод call

MainMenu.ui.xml

<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" 
xmlns:gwt="urn:import:com.google.gwt.user.client.ui" xmlns:my="urn:import:com.wn.webapp.client.UiBinder"> 

    <gwt:VerticalPanel> 
    <my:TopMenu/> 
    <gwt:VerticalPanel> 
     <gwt:HTMLPanel> 
      <gwt:TextBox/> 
     </gwt:HTMLPanel> 
     <my:ItemList/> 
     <my:PageMenu/> 
    </gwt:VerticalPanel> 
    </gwt:VerticalPanel> 
</ui:UiBinder 

Я создал MainMenu и заливали некоторые ui.xml файлы в него. Это прекрасно работает. Веб-сайт выглядит хорошо.

Но как я могу это сделать? Это код для моего файла PageMenu.ui.xml, который я встроил в файл MainMenu.ui.xml.

public class PageMenu extends Composite{ 

    private static PageMenuUiBinder uiBinder = GWT.create(PageMenuUiBinder.class); 

    interface PageMenuUiBinder extends UiBinderWidget, PageMenu{} 

    public PageMenu(){ 
     initWidget(uiBinder.createAndBindUi(this)); 
    } 

    public void setButtonText(ArrayListString textIds){ 
     //doessomething 
    } 
} 

Теперь я хочу позвонить, например. метод setButtonText() в onModuleLoad().

public void onModuleLoad() 
{ 
    MainMenu mainmenu = new MainMenu(); 
    RootPanel.get().add(this.mainmenu); 
    // call it here (setButtonText()) 
} 

Как это сделать?

Привет Лаура (я не такой опытный программист еще так пожалуйста знать, что, когда вы пытаетесь ответить.: D) THX

+0

сообщение PageMenu.ui.xml слишком , пожалуйста. –

+0

Это просто легкий пример. Не мой код сам, потому что я не должен публиковать код компании. ^^ может выглядеть как ... Laura

+0

Но дело не в содержании. Это просто вызов метода. – Laura

ответ

0

Чтобы получить доступ к button.setText() вы должны иметь доступ к button первый. Таким образом, ваш PageMenu.ui.xml должен иметь что-то вроде:

<gwt:Button ui:field="button" /> 

и ваш PageMenu.java должны иметь декларацию поля:

@UiField 
Button button; 

Реализовать добытчиками для PageMenu (в MainMenu) и для кнопки (в PageMenu), то вы можете сделать:

public void onModuleLoad() 
{ 
    MainMenu mainmenu = new MainMenu(); 
    RootPanel.get().add(this.mainmenu); 
    mainmenu.getPageMenu().getButton().setText("What you want."); 
} 
+0

Да Я знаю, как работать с uifields ^^ в самом классе PageMenu.java, но мне нужно иметь доступ к этой кнопке из другого класса. (onModuleLoad() не объявлен в PageMenu.class). Обычно я создавал экземпляр PageMenu и использовал метод. Но PageMenu встроен в MainMenu und MainMenu, создан в onModuleLoad(). Итак ... Я думаю, мне нужно получить доступ к экземпляру PageMenu, который создается MainMenu каким-то образом. Но как? ^^ – Laura

+0

Так что это так просто. Просто реализуйте getPageMenu в классе MainMenu, getButton в классе PageMenu и делайте: mainmenu.getPageMenu(). GetButton(). SetText() –

+1

Ничего себе, спасибо большое. Не знаю, почему я сам этого не понял. Так просто. =) – Laura

0

вы должны создать 2 аксессоров:

  • getButton() в PageMenu.java

  • getPageMenu() в MainMenu.java

Теперь Вы можете назвать его

mainMenu.getPageMenu().getButton().setText("your text"); 
+0

Спасибо. =) Но я думаю, что сначала в MainMenu.java нужно что-то подобное. СтраницаMenu pageMenu; @UiFactory PageMenu makePageMenu() { это.pageMenu = новая страницаMenu(); return this.control; } Или есть другой способ получить экземпляр? – Laura

+0

У вас есть несколько способов получить экземпляр объекта Ui. Это зависит от того, что вам нужно. Если вам нужно построить свой объект с одним или несколькими параметрами, вы можете использовать эти аннотации: '@ UiConstructor',' @ UiFactory' или '@UiField (при условии = true)', как описано здесь: [link] (https: // developers.google.com/web-toolkit/doc/latest/DevGuideUiBinder?hl=fr#Using_a_widget). Если вам не нужен конструктор с параметром, вы должны использовать аннотацию '@ UiField' без предоставленного параметра или' provided = false'. – RodolpheChe