ExtJS 4 GridView-如何获取单元格';是td还是div?
在GridPanel中,我们都知道可以在列配置中指定ExtJS 4 GridView-如何获取单元格';是td还是div?,view,grid,cell,extjs4,View,Grid,Cell,Extjs4,在GridPanel中,我们都知道可以在列配置中指定渲染器,以自定义单元格。现在有一个特殊情况,我需要构建一个定制的可视进度条(画布)来绘制到单元格中,我的问题是如何获得单元格的el 在渲染器回调中,可用的值有值、元数据、记录、行索引、列索引、存储和查看。我尝试了view.getNode或view.getCell,但仍然没有成功 提前谢谢你 /莱昂内尔 编辑 在进一步挖掘之后,我意识到在调用渲染器时,我的节点实际上还没有准备好,即视图。getNode和视图。getCell实际上正在工作,但延迟了
渲染器
,以自定义单元格。现在有一个特殊情况,我需要构建一个定制的可视进度条(画布)来绘制到单元格中,我的问题是如何获得单元格的el
在渲染器回调中,可用的值有值
、元数据
、记录
、行索引
、列索引
、存储
和查看
。我尝试了view.getNode
或view.getCell
,但仍然没有成功
提前谢谢你
/莱昂内尔
编辑
在进一步挖掘之后,我意识到在调用渲染器时,我的节点实际上还没有准备好,即视图。getNode
和视图。getCell
实际上正在工作,但延迟了(它始终返回null)
解决方法是使用setTimeout
并在节点就绪后渲染元素。这绝对不是最好的处理方式。欢迎提出任何建议:)
/Lionel证明了这个问题的答案是使用
setTimeout
来模拟一些延迟,以便在一些延迟之后可以正确添加节点
这是我的渲染器
renderer = function (v, meta, rec, r, c, store, view) {
setTimeout(function() {
var row = view.getNode(rec);
//Capturing the el (I need the div to do the trick)
var el = Ext.fly(Ext.fly(row).query('.x-grid-cell')[c]).down('div');
//All other codes to build the progress bar
}, 50);
};
很难看,但很管用。如果没有其他答案,我将在未来两天内接受它作为有效答案
干杯
/Lionel我有一个稍微整洁的解决方案,避免了调用
设置超时
基本上,我的呈现程序
将类
添加到需要自定义内容的单元格中,然后在页面上显示网格后,我使用侦听器的组合
将自定义内容呈现到该单元格中
renderer: function (value, metaData, record) {
metaData.tdCls = metaData.tdCls + ' customContentCell';
return '';
}
在网格上,我添加了一个afterrender
监听器,该监听器依次向gridview添加一个refresh
监听器。我希望使用viewready或其他事件,但在我使用的ext版本4.0.2a中,这似乎不起作用
listeners: {
afterrender: function (grid) {
var view = this.getView();
if (view)
view.on('refresh', gridRenderCustomContent, this);
}
}
在该函数中,我循环遍历所有记录,并将内容渲染到单元格中。类似于下面的内容,它只是向单元格中添加了一个ext容器,应该作为基础
var gridRenderCustomContent = function () {
var recordIdx, colEl, chart, record, ganttHolder;
for (recordIdx = 0; recordIdx < grid.store.getCount(); recordIdx++) {
record = grid.store.getAt(recordIdx);
holder = Ext.DomQuery.select('.customContentCell', grid.view.getNode(recordIdx));
if (holder.length) {
colEl = holder[0];
colEl.innerHTML = '';
var customContentContainer = new Ext.create('Ext.container.Container', {
style: 'height: 30px',
items:[ ... ],
renderTo: holder
});
}
}
};
var gridrendercutomcontent=函数(){
var recordIdx、colEl、图表、记录、甘特霍尔德;
for(recordIdx=0;recordIdx
我相信有办法解决这个问题。但如果这不是正确的方法,也欢迎任何建议。尝试使用css类的dom查询没有更干净的方法吗?我以为他们会在视图中的某个地方公开el
我认为这不能在渲染器中完成。你可以这样做插件,我已经做了我的进度栏(画布)在细胞<代码>视图。getNode通过添加延迟工作。当我清理完代码后,我会将我的答案和进度条一起发布/莱昂内尔