我正在尝试将一个函数绑定在网格的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!
答案 0 :(得分:3)
您可以推迟domGeom.position(row)
的调用,直到dgrid-refresh-complete
事件被发出。你需要包含dojo / on。
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)) {
on.once(this, 'dgrid-refresh-complete', function(){
require(['dojo/dom-geometry','dojo/dom-construct'],
function(domGeom, domConstruct){
console.log(domGeom.position(row));
}
);
})
}
}
return row;
});
修改强> 更新了jsfiddle来容纳树 http://jsfiddle.net/rayotte/q8bCx/2/