4

インライン編集可能グリッドがあります。ハイパーリンクを表示するように列を変更する必要があります。ハイパーリンクをクリックすると、UI アクションがトリガーされます。

ありがとう。

これまでの私のコード。リンク列のリンクは、通常の文字列として表示されます。これは、以下のtoString()の戻り値が原因であることはわかっていますが、ここで助けが必要です。それを正しくレンダリングする方法がわからない。

linkConf = new ColumnConfig<LinkData, String>(lp.url(), 200, "URL");
...
Anchor myLink = new Anchor();
myLink.addClickHandler(new ClickHandler() {

    @Override
    public void onClick(ClickEvent cEv) {
        someAction();       
    }

    private void someAction() {

    }

});


linkConf.setWidget(myLink, new SafeHtml() {
    @Override
    public String asString() {
        return toString();
    }
});
4

1 に答える 1

0

私のプロジェクトの1つで、私は同じことをしなければなりませんでした。CellClickHandlerアンカーのクリックをキャッチしようとする代わりに使用することをお勧めします。

最初に、クリック アクション用のより便利なハンドラーを作成します。

public interface CellClickAction<P> {
  void onCellClick(P proxy);
}

グリッド内のすべての ValueProvider のマッピングを保持するこのプラグインを使用します。

public class GridCellClickPlugin<P> implements ComponentPlugin<Grid<P>> {

  private final Map<ValueProvider<P, ?>, CellClickAction<P>> mapping;

  public GridCellClickPlugin() {
    this.mapping = new HashMap<ValueProvider<P, ?>, CellClickAction<P>>();
  }

  @Override
  public void initPlugin(final Grid<P> component) {
    component.addCellClickHandler(new CellClickHandler() {

      @Override
      public void onCellClick(CellClickEvent event) {
        if (!mapping.isEmpty()) {
          final ColumnConfig<P, ?> columnConfig = component.getColumnModel().getColumn(event.getCellIndex());
          final CellClickAction<P> action = mapping.get(columnConfig.getValueProvider());
          if (action != null) {
            final P proxy = component.getStore().get(event.getRowIndex());
            action.onCellClick(proxy);
          }
        }
      }
    });
  }
}

この列のクリック ハンドラーを登録し、プラグインを初期化します。

final GridCellClickPlugin<LinkData> plugin = new GridCellClickPlugin<LinkData>();
plugin.getMapping().put(lp.url(), new CellClickAction<LinkData>() {

  @Override
  public void onCellClick(LinkData proxy) {
    //do the desired action here: redirect to some url, show pop-up window, etc
  }  
});
plugin.init(grid);

テキストをリンクとしてレンダリングします。

linkConf = new ColumnConfig<LinkData, String>(lp.url(), 200, "URL");
linkConf.setCell(new AbstractCell<LinkData>() {

  @Override
  public void render(com.google.gwt.cell.client.Cell.Context context, LinkData value, SafeHtmlBuilder sb) {
    final Anchor anchor = new Anchor(value.getSomeText());
    sb.appendHtmlConstant(anchor.getElement().toString());
  }
});
于 2013-12-03T16:11:25.000 に答える