时间:2010-07-26 16:58:14

标签: datagrid extjs hyperlink

7 个答案:

答案 0 :(得分:15)

这适用于ExtJS 4和5.

使用renderer使内容看起来像链接:

renderer: function (value) {
    return '<a href="#">'+value+'</a>';
}

然后使用未记录的,动态生成的View事件cellclick来处理点击:

viewConfig: {
    listeners: {
        cellclick: function (view, cell, cellIndex, record, row, rowIndex, e) {

            var linkClicked = (e.target.tagName == 'A');
            var clickedDataIndex =
                view.panel.headerCt.getHeaderAtIndex(cellIndex).dataIndex;

            if (linkClicked && clickedDataIndex == '...') {
                alert(record.get('id'));
            }
        }
    }
}

答案 1 :(得分:2)

我可能不会使用锚标记,而是使用简单的单元格内容,使其看起来像锚(使用基本CSS)并处理GridPanel的cellclick事件来处理操作。这避免了处理锚点重新加载页面的默认点击行为(这正是我假设正在发生的事情)。

答案 2 :(得分:2)

尝试这样的事情:

Ext.define('Names', {
    extend: 'Ext.data.Model',
    fields: [
        { type: 'string', name: 'Id' },
        { type: 'string', name: 'Link' },
        { type: 'string', name: 'Name' }
    ]
});

 var grid = Ext.create('Ext.grid.Panel', {
    store: store,
    columns: [
        {
            text: 'Id',
            dataIndex: 'Id'
        },
        {
            text: 'Name',
            dataIndex: 'Name',
            renderer: function (val, meta, record) {
                return '<a href="' + record.data.Link + '">' + val + '</a>';
            }
        }
               ...
               ...
               ...

但我要感谢 - ExtJS Data Grid Column renderer to have multiple values

答案 3 :(得分:1)

出于这些目的,我使用CellActionsRowActions插件,具体取决于我实际需要的内容并处理单元格点击。

如果您想要看起来像锚点的东西,请改用<span>并执行@bmoeskau建议的内容。

答案 4 :(得分:1)

我创建了一个渲染器,所以看起来你正在点击它。

aRenderer: function (val, metaData, record, rowIndex, colIndex, store){
// Using CellClick to invoke
return "<a>View</a>";
},

但是我使用了一个单元格事件来管理点击。

cellclick: {
    fn: function (o, idx, column, e) {
        if (column == 1)  // Doesn't prevent the user from moving the column
        {
            var store = o.getStore();
            var record = store.getAt(idx);
            // Do work
        }
    }
}

答案 5 :(得分:0)

您可以使用“渲染器”功能将所需的任何HTML包含到单元格中。

答案 6 :(得分:0)

谢谢大家的回复。 在调试extJS-all.js脚本之后,我发现问题出在服务器端。

在我的Spring MVC控制器中,我将模型设置为会话,在我之前提到的用例中,用于将Ext.data.XmlStore的“totalProperty”重置为0,因此后续命中grid,用于显示空记录。

这是因为,ext-JS网格在它甚至遍历来自dataStore的记录之前检查“totalProperty”值。就我而言,dataStore有数据,但是大小被重置为null,因此出现了问题。

再次感谢您的投入!