ウィジェットをレンダリングしているビジネスオブジェクトに簡単に結びつける方法が必要です。したがって、ユーザーがウィジェットとやりとりをするときに、そのウィジェットのデータを保持するビジネスオブジェクトを簡単に判別できます。GWT - ビジネスオブジェクトをウィジェットに関連付ける方法
たとえば、AbsolutePanelで実装するカレンダーウィジェットを想像してみましょう。各apptオブジェクトに対して、カレンダーにラベルを追加します。ユーザーがラベルをクリックすると、apptを更新できます。だから私はラベルが参照するどのapptオブジェクトを知る必要があります。
たとえば、次のコードを見てみましょう。予定のラベルがクリックを受け取った場合、それがどのapptに表示されているかをどのように調べることができますか?私が見ることができる唯一の解決策は、そのapptへの参照を保持するLabel用のApptLabelサブクラスを作成することです。これは問題ありませんが、この例では、ウィジェットをデータオブジェクトに関連付けることのより一般的な必要性を示しています。これは、ビュー内に存在するすべてのオブジェクトがウィジェットをサブクラス化する必要があることを意味します。重いようです - 私はフレームワークで何かを見つけることを期待しました。私はオブジェクトキーに設定することができるウィジェットの文字列プロパティ
他のアプローチ私はしようとしました。地図のマップを維持する - 私はdoesntの作成ラベルオブジェクトとして、このdidntの仕事が表示されているのと同じであることを理想的には私が何かを行うことができます
class WidgetCalendar extends Composite {
AbsolutePanel m_panel = new AbsolutePanel();
m_panel.setStylePrimaryName("calendar");
m_panel.setPixelSize(width, height);
public WidgetCalendar(ArrayList<BomAppt> appts) {
initWidget(m_panel);
for (BomAppt a : appts) {
Label l = new Label();
l.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
// how do I know my BomAppt in here ?
}
m_panel.add(l, someX, someY);
}
}
}
(私は推測はObject.equalsの面では、HashMapのは、使用するものです)このように クラスWidgetCalendarはコンポジットを拡張します{ AbsolutePanel m_panel = new AbsolutePanel(); m_panel.setStylePrimaryName( "calendar"); m_panel.setPixelSize(width、height);
public WidgetCalendar(ArrayList<BomAppt> appts) {
initWidget(m_panel);
for (BomAppt a : appts) {
Label l = new Label();
l.setItemData(a.getUniqueId());
l.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
BomAppt a = BomAppt.getApptWithId(e.getItemData())
}
}
m_panel.add(l, someX, someY);
}
}
}
これは私がサブクラスを作成するソリューションである、これは私には重いようで、私たちは次のコードを見れば、私は、単純なもの例えば
class ApptLabel extends Label {
public ApptLabel(BomAppt a) {
m_a = a;
this.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
m_a.doSomething();
});
}
BomAppt m_a;
}
class WidgetCalendar extends Composite {
AbsolutePanel m_panel = new AbsolutePanel();
m_panel.setStylePrimaryName("calendar");
m_panel.setPixelSize(width, height);
public WidgetCalendar(ArrayList<BomAppt> appts) {
initWidget(m_panel);
for (BomAppt a : appts) {
BomLabel l = new BomLabel();
l.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
// how do I know my BomAppt in here ?
}
m_panel.add(l, someX, someY);
}
}
}
確かに私はこの作品に同意します - 私は実際に私の質問にこのパターンを含めました。私は何か軽い重量を探していた.. – dancl