Javascript 在dgrid renderRow之后执行函数

Javascript 在dgrid renderRow之后执行函数,javascript,dojo,dgrid,Javascript,Dojo,Dgrid,我试图在网格的renderRow事件之后绑定要执行的函数。所以我使用了DOJO的aspect.after,但这里是kicker。这将在确实呈现行之前执行,因此divs\tds尚未出现在屏幕上。因为我确实想使用项目的位置,所以使用dojo/domgeometry返回一个填充了零的对象。如何保证我的函数在行显示完成后执行 在下面你可以找到我称之为JS的地方 aspect.after(grid, 'renderRow', function(row, args) { var ob

我试图在网格的
renderRow
事件之后绑定要执行的函数。所以我使用了DOJO的aspect.after,但这里是kicker。这将在确实呈现行之前执行,因此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(“完成刷新”)从不被调用,位置日志也不被调用

网格上有许多列,一对列系在一个合成列上,一个名为colum的树,还有一些其他的。展开树时会调用renderRow


您可以推迟调用
domgome.position(行)
,直到发出
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;
});
编辑 更新了JSFIDLE以适应树

您可以推迟调用
domgome.position(行)
,直到发出
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;
});
编辑 更新了JSFIDLE以适应树

您可以推迟调用
domgome.position(行)
,直到发出
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;
});
编辑 更新了JSFIDLE以适应树

您可以推迟调用
domgome.position(行)
,直到发出
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;
});
编辑 更新了JSFIDLE以适应树

@ahmed非常糟糕的主意。setTimeout是在一条评论中提出的,后来被删除。它是,但问题是我想我将不得不求助于它。使用自动刷新直到位置返回非零数据的超时。它像地狱一样笨重,但比nothing@ahmed这是一个非常糟糕的主意。setTimeout是在一条评论中提出的,后来被删除了。是的,但问题是我想我不得不求助于它。使用自动刷新直到位置返回非零数据的超时。它像地狱一样笨重,但比nothing@ahmed这是一个非常糟糕的主意。setTimeout是在一条评论中提出的,后来被删除了。是的,但问题是我想我不得不求助于它。使用自动刷新直到位置返回非零数据的超时。它像地狱一样笨重,但比nothing@ahmed这是一个非常糟糕的主意。setTimeout是在一条评论中提出的,后来被删除了。是的,但问题是我想我不得不求助于它。使用自动刷新直到位置返回非零数据的超时。这是笨重的地狱,但总比没有好weet,去尝试它,并将张贴结果后,它不工作,不幸的。我尝试将
dgrid refresh complete
事件连接到grid和grid.domNode(在onDemandList.js上调用),但两个选项都没有被触发。如果有什么不同,这就是网格的声明<代码>声明([OnDemandGrid,Selection,Keyboard,CompoundColumns])
代码已经过测试,可以正常工作。如果((typeof(object.dep)!='undefined')&(object.dep.length>0))中的一个条件不满足,则可能是其中一个条件。否。我在在线前放了一个日志,它被触发了。Domgome控制台没有。您是否在其中一列上使用树扩展进行了\测试?我没有使用树插件,但在尝试之前,您使用的是哪个版本的dgrid和Dojo?我这样问是因为在更高版本中添加了
dgrid refresh complete
事件。我目前使用的是dgrid 0.3.11和Dojo 1.9.1Sweet,我将尝试它,并将在它不幸不起作用后在这里发布结果。我尝试将
dgrid refresh complete
事件连接到grid和grid.domNode(在onDemandList.js上调用),但两个选项都没有被触发。如果有什么不同,这就是网格的声明<代码>声明([OnDemandGrid,Selection,Keyboard,CompoundColumns])代码已经过测试,可以正常工作。如果((typeof(object.dep)!='undefined')&(object.dep.length>0))中的一个条件不满足,则可能是其中一个条件。否。我在在线前放了一个日志,它被触发了。Domgome控制台没有。您是否在其中一列上使用树扩展进行了\测试?我没有使用树插件,但在尝试之前,您使用的是哪个版本的dgrid和Dojo?我这样问是因为在更高版本中添加了
dgrid refresh complete
事件。我目前使用的是dgrid 0.3.11和Dojo 1.9.1Sweet,我将尝试它,并将在它不幸不起作用后在这里发布结果。我尝试将
dgrid refresh complete
事件连接到grid和grid.domNode(在onDemandList.js上调用),但两个选项都没有被触发。如果有什么不同,这就是网格的声明<代码>声明([OnDemandGrid,Selection,Keyboard,CompoundColumns])代码已经过测试,可以正常工作。如果((typeof(object.dep)!='undefined')&(object.dep.length>0))中的一个条件不满足,则可能是其中一个条件。否。我在在线前放了一个日志,它被触发了。Domgome控制台没有。您是否在其中一列上使用树扩展进行了\测试?我没有使用树插件,但在尝试之前,您使用的是哪个版本的dgrid和Dojo?我这么问是因为