メニュー バーをカプセル化する複合ウィジェットを作成しようとしています。クリック ハンドラーを定義して、作成した .ui.xml に簡単に追加できるようにします。
これは私のメニューバーの ui.xml です
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder
xmlns:ui="urn:ui:com.google.gwt.uibinder"
xmlns:g="urn:import:com.google.gwt.user.client.ui"
xmlns:v="urn:import:com.epiuse.cloud.portal.ui.client.view"
xmlns:widget="urn:import:com....client.widgets">
<g:AbsolutePanel styleName="navBar">
<g:HTMLPanel>
<ul>
<li><g:HTML ui:field="aboutLink"><a>About</a></g:HTML></li>
<li>|</li>
<li><g:HTML ui:field="contactLink"><a>Contact</a></g:HTML></li>
<li>|</li>
<li><g:HTML ui:field="loginLink"><a>Login</a></g:HTML></li>
</ul>
</g:HTMLPanel>
</g:AbsolutePanel>
</ui:UiBinder>
これは関連するビューです:
public class GeneralMenuBarImpl extends Composite implements GeneralMenuBar {
@UiTemplate("GeneralMenuBar.ui.xml")
interface GeneralMenuBarImplUiBinder extends UiBinder<Widget, GeneralMenuBarImpl> {}
private static GeneralMenuBarImplUiBinder uiBinder =
GWT.create(GeneralMenuBarImplUiBinder.class);
private Presenter presenter;
@UiField HTML loginLink;
@UiField HTML contactLink;
@UiField HTML aboutLink;
public GeneralMenuBarImpl(){
initWidget(uiBinder.createAndBindUi(this));
}
public void setPresenter(Presenter presenter){
this.presenter = presenter;
}
@UiHandler("loginLink")
void onLoginLinkClicked(ClickEvent event) {
presenter.onLoginLinkClicked();
}
@UiHandler("contactLink")
void onContactLinkClicked(ClickEvent event) {
presenter.onContactLinkClicked();
}
@UiHandler("aboutLink")
void onAboutLinkClicked(ClickEvent event) {
presenter.onAboutLinkClicked();
}
public Widget asWidget(){
return this;
}
}
次に、正しい名前空間を ui.xml ファイルに追加してホームページに含め、次の行を追加します。
<widget:GeneralMenuBarImpl></widget:GeneralMenuBarImpl>
これはメニュー バーを表示するために機能しますが、クリック ハンドラーが機能しません。メニューバーが、イベントが発生したことを伝えるプレゼンターを受け取っていないためだと思います。
私の質問は次のとおりです。含まれているウィジェットにプレゼンターを渡すか、ウィジェットを含めているページからウィジェットの uiFields にアクセスするにはどうすればよいですか?
誰かが助けてくれることを願っています。何年もの間、この問題に悩まされてきました!
よろしくお願いします!