2012-11-05 62 views
4

我有一個內聯可編輯網格。我需要修改一列以顯示超鏈接,點擊後會觸發一些UI操作。Sencha,GXT 3,在網格中插入超鏈接

謝謝。

我的代碼到目前爲止。鏈接列中的鏈接呈現爲常規字符串。我知道這是因爲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(); 
    } 
}); 
+1

我總是downvote沒有代碼或任何嘗試解決問題的問題 –

+0

好點。我的帖子應該更完整。這是我迄今爲止(在下面的「答案」中)。 –

+1

@ R.V。這可能更適合這個問題,而不是作爲「答案」。這樣,新讀者可以正確地將其與問題聯繫起來。 – Whymarrh

回答

0

在我的一個項目中,我不得不這樣做。我建議使用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); 
      } 
     } 
     } 
    }); 
    } 
} 

註冊單擊處理此列和init插件:

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()); 
    } 
});