2011-12-03 15 views
-3

GWTプロジェクトにカスタムウィジェット(OrderItem)があります。このウィジェットはTextBoxです。私はそれを "Navid"に設定しました。しかし、パネルに複数のインスタンスOrderItemを作成するとどうなりますか? idはその後繰り返されます。これはhtmlを無効にします。GWTウィジェットIDとHTML標準

TextBoxに一意のIDを割り当てるにはどうすればよいですか?

答えて

6

通常、GWTウィジェットは自動的に固有のIDを生成します。このIDは、通常、IDが何であるか心配することはありません。あなたがTextBoxのIDを設定していると言ったら、私はあなたがmyTextBox.getElement().setId("Navid")のようなものを呼び出していると仮定しています。

あなたのユースケースに応じて考えられる2つの簡単な方法があります。 HTMLPanelクラスには静的なcreateUniqueId()メソッドがあり、単独で使用することも、ユニークなIDを簡単に作成することもできます。 myTextBox.getElemement().setId("Navid-" + HTMLPanel.createUniqueId())のように。唯一の問題は、生成されたIDが確定的でないことです。

他の一般的な方法は、親ウィジェットのIDに基づいてIDを生成することです。 。

しかし、私はここで推測し、自分のカスタムIDをこのウィジェットに割り当てたい理由は、あなたがGWTコードの外から、Javascriptたとえば、JQueryから取得できます。この場合、便利なように一意でなければならないIDを割り当てる代わりに、ウィジェットの要素にhtmlクラス名を代入することをお勧めします。次に、ウィジェットの要素を、OrderItemのIDまたはクラスのIDまたはクラスに関連して指定します。例のように要素にhtmlクラス名を追加することができますmyTextBox.getElement().addStyleName("navid")

したがって、OrderItemウィジェットのルートHTML要素にhtmlクラスのorderItemWidgetを割り当て、TextBoxにnavidのhtmlクラスを割り当てると、 ".orderItemWidget .navid"

2

これはGWTによってウィジェット上でIDを簡単に設定できないためです。スタイリングのために、CSSクラス名を使う方がはるかに簡単です。実際には、IDを使用する理由はほとんどなく、動的に生成されるもの(ウィジェットなど)はほとんどありません。

今、あなたの質問に答えるために、ブラウザが(ドキュメント順に)それらの要素の最初のを返すように同じIDを共有するいくつかの要素の場合を許容し、getElementByIdis defined

関連する問題