我试图renderRow
在网格事件之后绑定一个要执行的函数。所以我使用了 DOJO 的 aspect.after,但这里是关键。这在该行确实被渲染之前执行,因此 divs\tds 还没有出现在屏幕上。因为我确实想使用项目的位置,所以使用dojo/domgeometry
返回一个填充零的对象。如何保证我的函数将在行显示完成后执行?
您可以在下面找到我调用它的 JS。
aspect.after(grid, 'renderRow', function(row, args) {
var object = args[0];
if (object.type == 'tipo_exec') {
row.className += ' black';
} else if(object.type == 'exec') {
row.className += ' gray';
} else if(object.type == 'ic') {
if ((typeof(object.dep)!='undefined') && (object.dep.length > 0)) {
require(['dojo/dom-geometry','dojo/dom-construct'],
function(domGeom, domConstruct){
console.log(domGeom.position(row));
}
);
}
}
return row;
});
编辑:另一件事,我正在使用树扩展,并且 renderRow 在单击父级展开后发生。
编辑:所以这里有一些更多信息,以备不时之需。店铺很简单:
store = new Observable(new Memory({'data': data,
'getChildren': function(parent, options){
return this.query({'parent': parent.id}, options);
},
'mayHaveChildren': function(parent){
return parent.hasChildren;
}
}));
并且网格被声明为:
grid = new (declare([OnDemandGrid, Selection, Keyboard, CompoundColumns]))({
'columns': nCols,
'query': { 'parent': undefined },
'store': store
}, gridId);
这是之后方面的内部
if ((typeof(object.dep)!='undefined') && (object.dep.length > 0)) {
console.log('just before adding the refresh');
on.once(this, 'dgrid-refresh-complete', function(){
console.log('finished refreshing');
require(['dojo/dom-geometry','dojo/dom-construct'],
function(domGeom, domConstruct){
console.log(domGeom.position(node));
}
);
});
}
console.log('finished refreshing');
永远不会被调用,位置日志也不会。
网格上有许多列,一对列在一个复合列上,一个名称列是一棵树,还有一些其他列。展开树时会调用 renderRow!