0

基本的に、 GWTのドキュメントで定義されているセルの色付けに似たものを実装したい

ただし、DIV 要素でスタイルを直接指定したくはありませんがCSSResource、CellTable 用に定義したカスタムから難読化されたスタイル名を割り当てたいと考えています。

ここにいくつかのコードがあります:

ResourcesCellTableのカスタム インターフェイスを定義しました。

public interface CellTableResources extends Resources {

    @Source({CellTable.Style.DEFAULT_CSS,CellTableStyle.STYLE})
    CellTableStyle cellTableStyle();

    public interface CellTableStyle extends Style {
        String STYLE = "CellTable.css";

        public Sring coloredCell();
    }
}

それを CellTable のコンストラクターに渡します。

CellTable<XY> table = new CellTable<XY>(15,cellTableResources);

これが私のカスタムセルの外観です。

public class ColorCell extends AbstractCell<String> {

    interface Templates extends SafeHtmlTemplates {

      @SafeHtmlTemplates.Template("<div class=\"{0}\">{1}</div>")
      SafeHtml cell(String classname, SafeHtml value);
    }
    private static Templates templates = GWT.create(Templates.class);

    @Override
    public void render(Context context, String value, SafeHtmlBuilder sb) {
      if (value == null) {
        return;
      }
      // how can I access the CSSResources which I pass to the CellTable
      CellTableResources ressources = ?
      String className = ressources.cellTableStyle().coloredCell();

      SafeHtml safeValue = SafeHtmlUtils.fromString(value);
      SafeHtml rendered = templates.cell(className, safeValue);
      sb.append(rendered);
    }
  }

CellTableRessourcesカスタム セルの CellTable に渡したものにアクセスするにはどうすればよいですか? 重要な部分は次のとおりです。

// how can I access the CSSResources which I pass to the CellTable
CellTableResources ressources = ?
String className = ressources.cellTableStyle().coloredCell();

私が思いついた唯一の解決策は、CellTableRessourcesを my のコンストラクターに渡すことAbstractCellです。もっとエレガントな方法はありませんか(すでにCellTableに渡しています)。

主な質問は、
「Cell または Column から CellTable 変数にアクセスするにはどうすればよいですか?」ということだと思います。

4

1 に答える 1

0

「よりエレガントな方法」の問題は、CellTable独自のスタイルが他の場所で役立つことを意味しますが、おそらくそうではないでしょう。彼らがスタイルのゲッターを提供したとしても、それはタイプStyleのインスタンスを返し、それをあなた自身のスタイルにキャストする必要があります。

これをあなたのスタイルと考えるのが最善です。これにはいくつかのオプションがあります。

  • セル内からアクセスできるように、参照を保持します
  • GWT。セル内にクライアントバンドルの新しいコピーを作成し、ensureInjected()を呼び出します-実際には一度だけ注入されるので、これは実際には問題ではなく、良い習慣です。テーブル自体のスタイル。
  • 最後に、セルに必要なスタイルを独自のclientbundle / cssresourceに分割し、それらをセル自体の一部にします。これにより、(セルリストやセルブラウザなどとは対照的に)セルテーブルに配置されている場合でも、セルの依存関係を完全に解消できます。

唯一注意が必要なのは、セルのスタイルがテーブルのスタイルに依存ている場合です。この場合、処理しているこの厄介な依存関係は良いことです。スタイル自体の依存関係に注意する必要があります。3番目の(これが最もクリーンな)オプションを選択しても、この依存関係がある場合は、さらに一歩進んで、セルでスタイル/クライアントバンドルを宣言しますが、CellTableのClientBundleと同じように拡張します。これらはインターフェースであるため、これらの両方を拡張し、各テーブルとセルに提供される1つのバンドルを作成できます。

于 2012-01-13T23:35:05.523 に答える