私は GWT を使用して Web アプリに取り組んでおり、UiBinders を使用してビルドするように変更中です。
それらを参照するクラスと同じパッケージに含まれるいくつかのバインダーの作業バージョンがありますが、これらの多くはアプリ全体で普遍的なユーティリティを備えており、それらを uibinders パッケージに分解したいと考えていました。
作業コードの一部を次に示します
TableListPanel.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">
<g:HTMLPanel>
<div id="tableListPanel">
<g:HTMLPanel styleName="buttonPanel" ui:field="buttonPanel"></g:HTMLPanel>
<g:HTMLPanel styleName="tableList" ui:field="tableList"></g:HTMLPanel>
<table align="center"><tr>
<td align="center"><g:HTMLPanel styleName="tableMenu" ui:field="tableMenu"></g:HTMLPanel></td>
</tr></table>
</div>
</g:HTMLPanel>
</ui:UiBinder>
TableListPanelBinder Java ファイル:
public class TableListPanelBinder extends Composite implements HasText {
private static AuditPanelUiBinder uiBinder = GWT
.create(AuditPanelUiBinder.class);
interface AuditPanelUiBinder extends UiBinder<Widget, TableListPanelBinder> {
}
public TableListPanelBinder() {
initWidget(uiBinder.createAndBindUi(this));
}
@UiField
protected HTMLPanel buttonPanel;
@UiField
protected HTMLPanel tableList;
@UiField
protected HTMLPanel tableMenu;
public void bindUiElement(HTMLPanel container, Widget widjetObj) {
container.add(widjetObj);
}
最後に、ウィジェットを上記の ui:fields にバインドするコード内の呼び出し:
public AuditReportProfilesPanel() {
super();
this.setWidth("100%");
this.setSpacing(4);
this.parmSetsTable = createParmSetsTable();
SimplePager.Resources pagerResources = GWT.create(SimplePager.Resources.class);
pager = new SimplePager(TextLocation.CENTER, pagerResources, false, 0, true);
pager.setDisplay(parmSetsTable);
TableListPanelBinder reportListBinder = new TableListPanelBinder();
this.add(reportListBinder);
// -START- Bind UI Elements -START-
reportListBinder.bindUiElement(reportListBinder.tableList, parmSetsTable);
reportListBinder.bindUiElement(reportListBinder.tableMenu, pager);
reportListBinder.bindUiElement(reportListBinder.buttonPanel, createActionBar());
//-END- Bind UI Elements -END-
}
これはおそらくこれを設定するための最もクリーンな方法ではないことはわかっていますが、私は進んで学んでいます.
Binder を別のパッケージに移動すると、private/protected アクセス修飾子によってコードにアクセスできなくなることはわかっていますが、それらを public に変更しても何の役にも立ちません。
修正への提案は大歓迎です。このアプリにはいくつかの異なるクラス パッケージがあり (基本的にアプリ内の異なるページに相当します)、それらはすべて同様のテーブル設定を使用するため、すべてのパッケージでコードが重複することを避けたいと考えています。それを達成するための最善の方法について100%確信があるわけではありません。
Binders パッケージで Abstract クラスを作成し、個々のアプリ パッケージでそれらを拡張すると問題が解決しますか、それとも何か不足していますか?