2011-10-05 9 views
3

私はClientBundleとスタイルインターフェイスを定義し、@sourceアノテーションを使ってCSSファイルに接続しました。gwt css uibinder共有リソース

私は2つの質問がある:

  1. 私は次の例外を取得し、私のUiBinderサンプルメッセージファイルに<ui:with>を使用します。Deferred binding result type MyStyle should not be abstract.誰かが何が起こっているのか説明できますか?そして、どのように私のスタイルを正しくuibinderファイルに含めることができますか?

  2. 私は毎回スタイルを初期化するというペナルティを支払うことなく、多くのユービンダーにリソースを共有したいと思います。 Gwtの貧血のdevガイド、UiField(provided=true)を使用するか、@uiFactoryを使用することを提案します。私は自分のカスタムウィジェットを使用するために@uiFactoryをうまく使っていますが。 @uiFactoryを使用してスタイルをuiBinderに挿入する方法はわかりません。例えば

//in pojo 
@UiFactory 
public MyStyle getMyStyle() { 
    return myStyle; 
} 

//in uibinder 
<g:Label addStyleNames="{myStyle.defaultLable}"/> 

は、どのように私はこの仕事を得ることができますか?

ありがとうございます。

答えて

7

私はUiBinderサンプルメッセージファイルに以下の構成を使用します:MyResourceは、CSSリソース含むインタフェースです

<ui:with field='res' type="com.example.client.resources.MyResource" /> 

public interface MyResource extends ClientBundle { 
    @Source("mycss.css") 
    MyCssResource css(); 
} 

MyCssResourceは次のとおりです。

public interface MyCssResource extends CssResource { 
    String someStyle(); 
} 

でこれは次のように使用されます:

<g:TextBox addStyleNames="{res.css.someStyle}" /> 
+0

ありがとうございました...あなたの説明が私の最初の問題を解決するのを助けました。同じリソースを複数のuibinderファイルでどのように共有できるかを知っていますか?一度バンドルを作りたいです。再度、感謝します! – hba

+0

GWTコンパイラがインライン展開するので心配する必要はありません。そのため、生成されたJavaScriptでは、各uibinderでのリソースの初期化は問題になりません。あなたのコードでは、すべてのクラスで共有される静的インスタンスを使用できます。起動コードで 'ensureInjected'を呼び出すようにしてください。そうすれば、uibinderファイルのリソースが実際に注入されます。 –

+0

私は、ありがとう、これをありがとう...あなたはgwtのドキュメントで知っている:(http://code.google.com/webtoolkit/doc/latest/DevGuideUiBinder.html#Share_resource_instances)。 @uiFactoryアノテーションを使用してui:with節を回避する方法について説明します。あなたはそれを得ることができましたか? – hba

関連する問題