答案 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)
出于这些目的,我使用CellActions或RowActions插件,具体取决于我实际需要的内容并处理单元格点击。
如果您想要看起来像锚点的东西,请改用<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,因此出现了问题。
再次感谢您的投入!