【发布时间】:2013-10-16 18:58:09
【问题描述】:
我正在尝试在网格的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!
【问题讨论】:
-
@ahmed 非常糟糕的主意。
-
setTimeout 在一条评论中被建议,该评论已被删除。
-
是的,但问题是我认为我将不得不求助于它。使用自动刷新的超时,直到该位置返回非零数据。它很笨重,但总比没有好
标签: javascript dojo dgrid