如何使用带树扩展的dgrid的renderRow方法的一个方面。

时间:2015-05-20 20:35:47

标签: tree dojo aspect-ratio dgrid

我正在尝试使用带有Tree扩展名的dgrid来设置行的样式。为此,我使用了https://github.com/SitePen/dgrid/issues/380中建议的aspect.after,如果你不使用树扩展,它会很好。

但是使用Tree扩展时,网格会在构造函数完成时呈现,因此aspect.after无效。

我的代码是:

require([
    'dojo/_base/declare',
    'dgrid/OnDemandGrid',
    'dgrid/Tree',
    'dgrid/Keyboard',
    'dgrid/Selection',
    'dstore/Memory',
    'dojo/aspect',
    'dstore/Tree',
    'dgrid/extensions/ColumnResizer',
    'dojo/domReady!'
], function (declare,OnDemandGrid, tree, Keyboard, Selection, Memory,aspect,TreeStore,ColumnResizer)  {

var dataStore = new (declare([ Memory, TreeStore ]))({ data: $jsonData });

var CustomGrid = declare([ OnDemandGrid, tree, Keyboard, Selection, ColumnResizer ]);

var columns = $jsonHeadTitles;
columns[0][0] = tree(columns[0][0]);

var grid = new CustomGrid({
        className: 'dgrid-autoheight',
        collection: dataStore.filter( { parent: 0 }),
        columns: columns,
        noDataMessage: 'Sin registros',
        shouldExpand: function(){ return true; },
        selectionMode: 'single',
        cellNavigation: false,
        formatterScope: { html: function(item){ return item; }}

}, '$nombre');

aspect.after(grid, 'renderRow', function(row, args) {
    var object = args[0];
    if (!empty(object.parent)) {
        row.className += ' gridchildren';
    }
    return row;
});

 grid.on('dgrid-error', function(event) {
    console.error(event.error.message);
});

});

我们如何使用Tree扩展来设置行的样式?

此致

1 个答案:

答案 0 :(得分:5)

您的问题与使用Tree mixin无直接关系;实际上,在第一次渲染时没有它就会遇到同样的问题,因为在这种情况下初始渲染运行后aspect.after被连接起来(因为网格立即启动并且正在使用的存储是同步)。

有几个选项可以解决这个问题。

一种选择是最初将collection设置为null,然后仅在调用aspect.after后将其设置为您的实际商店。

另一种方法是不将网格绑定到文档流中已有的元素,在这种情况下,在您手动调用grid.startup之前,初始渲染不会发生,让您有机会调用{{1事先。

或者,您可以将逻辑运行到aspect.after调用中,以便将功能混合到网格中,而不是在创建实例后使用declare。例如:

aspect

另外值得注意的是:在dgrid 0.4中将列传递给var Grid = declare([ OnDemandGrid, Tree, Keyboard, Selection, ColumnResizer ], { renderRow: function (object) { var rowElement = this.inherited(arguments); if (!empty(object.parent)) { rowElement.className += ' gridchildren'; } return rowElement; } }); (正如您在创建网格之前所做的那样)是不正确的。 tree现在已成为mixin(您已在Tree来电中正确使用)。