3

いくつかの UI Binder テンプレートで同じスタイルを使用する必要があるため、https ://developers.google.com/web-toolkit/doc/latest/DevGuideUiBinder#Using_an_external_resource の説明に従ってすべてを行いました。

だから私は次のことをしました:

1. 作成されたリソース インターフェイス:

パブリック インターフェイス リソースは ClientBundle を拡張します {
    @Source("shared.css")
    スタイル style();

    public interface Style extends CssResource {
        文字列 grayedOut();
    }
}

2. shared.cssResources クラスと同じディレクトリにファイルを作成します。

。グレーアウト{
    背景色: 赤;
}

3. withUI Binder テンプレートに次の要素を 追加しました。<ui:with type="correct.package.Resources" field="res"/>

4. UI Binder テンプレートのスタイルへの参照を追加:addStyleNames="{res.style.grayedOut}"

しかし、うまくいきません。grayedOut スタイルがまったく適用されていないのと同じように、ビューがレンダリングされます。

しかし、私は2つのことを観察しました:

  1. Firebug/Chrome Dev Tools では、追加しようとしているスタイルに対応する使い古されたスタイル名が要素に割り当てられていることがわかりますclass="GAWERH0MI gwt-TabLayoutPanelContent"(GAWERH0MI私のクラスに対応しているようですgrayedOut)が、「要素スタイル」パネルで見つけることができません。おそらく、このクラスが空 (本体なし) であることを意味します。(私は実験を行い、そのツールで同じ効果を持つ要素に空のクラスを割り当てました)。
  2. .css でスタイル名を変更すると、スタイルgrayedOutが見つからないというランタイム エラーが発生します。これは、スタイル クラスが正常に検出されたにもかかわらず、何らかの理由で期待どおりに動作しないことを意味しているようです。
4

2 に答える 2

3

インスタンスを呼び出すのを忘れた可能性がensureInjected()ありResources.Styleます。

これは に対しては自動的に行われます(およびインターフェースを<ui:style>コーディングしないため、これらは UiBinder によって生成されます) が、他の に対しては行われません。ClientBundleCssResourceCssResource

@UiField Resources resただし、 の値が注入される<ui:with field="res">ため、 の呼び出しres.style().ensureInjected()の直後に呼び出すことができますcreateAndBindUi
IMO、ただし、Resourcesインスタンスをビューに挿入して を使用する方がよいため、インスタンスがビューに挿入される前に が呼び出される@UiField(provided=true)ことを確認するか、各ビューで呼び出すことを選択します。https://developers.google.com/web-toolkit/doc/latest/DevGuideUiBinder#Share_resource_instancesのようにensureInjected()ensureInjected()

于 2012-07-06T14:14:55.873 に答える