GWTプロジェクトにカスタムウィジェット(OrderItem
)があります。このウィジェットはTextBox
です。私はそれを "Navid"に設定しました。しかし、パネルに複数のインスタンスOrderItem
を作成するとどうなりますか? idはその後繰り返されます。これはhtmlを無効にします。GWTウィジェットIDとHTML標準
TextBoxに一意のIDを割り当てるにはどうすればよいですか?
GWTプロジェクトにカスタムウィジェット(OrderItem
)があります。このウィジェットはTextBox
です。私はそれを "Navid"に設定しました。しかし、パネルに複数のインスタンスOrderItem
を作成するとどうなりますか? idはその後繰り返されます。これはhtmlを無効にします。GWTウィジェットIDとHTML標準
TextBoxに一意のIDを割り当てるにはどうすればよいですか?
通常、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"
これはGWTによってウィジェット上でIDを簡単に設定できないためです。スタイリングのために、CSSクラス名を使う方がはるかに簡単です。実際には、IDを使用する理由はほとんどなく、動的に生成されるもの(ウィジェットなど)はほとんどありません。
今、あなたの質問に答えるために、ブラウザが(ドキュメント順に)それらの要素の最初のを返すように同じIDを共有するいくつかの要素の場合を許容し、getElementById
is defined