0

次の質問に対する答えは、これが可能であることを示しています。

UIBinder に div ではなくスパンを与えようとしています

テンプレートで宣言する<g:HTMLPanel tag="span">と、HTMLPanel は<span>デフォルトの要素ではなく、最終結果の要素になります<div>

HTMLPanel には次のコンストラクタがあります。

public HTMLPanel(String tag, String html)

おそらくこのメソッドによって呼び出されますが、どのように?テンプレートにタグ属性がない場合、使用されるコンストラクタはおそらく次のとおりです。

public HTMLPanel(String html)

コンストラクターにアノテーションを付けて、テンプレートで定義されたパラメーターを使用してウィジェットを作成できることは理解して@UiConstructorいますが、定義されている属性に応じてコンストラクターを変更するにはどうすればよいですか?

また、どのようにString html自動的に入力されますか? 要素のコンテンツとして html 属性の暗黙的な定義はありますか? それとも、これは HTMLPanel のためだけの UIBinder の非標準的な動作ですか?

4

1 に答える 1

1

HTMLPanelHTMLPanelParserからの要素を処理する専用がありますui.xml

要素パーサーはUiBinderの内部部分であり、独自のパーサーを追加することはできません。

単一の@UiConstructorコンストラクターを宣言し、残りをセッターが処理する必要があります。最終的な検証は、で行われる可能性がありますonAttachComposite呼び出しを忘れたときのアタッチ時のスローと同様、およびinitWidgetについても同様です)。WidgetsetElement

複雑な場合、および/またはコンストラクター引数の使用を強制したい場合は、特別なことは何もせず、ウィジェットのユーザーに@UiFactoryまたはを使用させ@UiField(provided = true)ます。これは、、またはなどの場合にすでにSuggestBox当てはまりValueListBoxますCellList

私の個人的な好みは、その最後のアプローチに行きます。

于 2012-11-15T14:41:31.457 に答える