dgrid总是显示少于当前的一个记录

时间:2015-03-28 00:15:37

标签: dojo dgrid

我正在使用dgrid,如下所示:

        query_grid: function(json_query, target, select){
        var self = this;
        require(["dojo/_base/declare", 
                 "dgrid/Grid",
                 "dgrid/extensions/ColumnResizer", 
                 "dgrid/Selection", 
                 "dgrid/selector",
                 "dgrid/extensions/DijitRegistry",
                 "dgrid/extensions/Pagination"], 
            function(declare, Grid, ColumnResizer, Selection, selector, DijitRegistry, Pagination){
                util.destroy("grid_"+json_query.path);
                var columns = {};
                if (select){
                    columns.widget = selector({
                        id: "widget",
                        label: " ",
                        selectorType: "radio", 
                        resizeable: false, 
                        width: 30});
                }
                var data = json_query.data;
                for (var i=0; i<data.keys.length; i++){
                    columns[data.keys[i]] = {label: util.slice_path(data.keys[i], 2)};
                }
                var grid = new (declare([Grid, ColumnResizer, Selection, DijitRegistry, Pagination]))({
                    id: "grid_"+json_query.path,
                    columns: columns,
                    store:  new Memory({data: data.records}),
                    selectionMode: select?"single":"none",
                    pagingLinks: 1,
                    pagingTextBox: true,
                    firstLastArrows: true
                });
                dojo.place(grid.domNode, target, 'last');
                grid.refresh();
            }
        );
        return json_query.path;
    }

但是当我查看结果时,它总是显示少于一个记录,直到我点击列标题(导致排序),然后显示所有记录。任何人都可以解决或帮助解决方案/解决方法吗?

1 个答案:

答案 0 :(得分:2)

grid.refresh()替换为grid.startup()

如果实例在文档流程中创建后,dgrid将自动调用startup。这不是这里的情况因为你之后放置它,所以你需要在流程之后调用startup来告诉它它可以执行几何敏感操作。

在不调用startup的情况下,resize最初从未被调用过。因此,网格无法正确计算页眉/页脚的高度,并且您的10行中的一行正在进行模糊处理。排序时会修复它,因为dgrid/Grid的{​​{1}}方法调用_setSort,以防标题行的大小因排序箭头的位置而发生变化。

在这种情况下,您可以将resize替换为refresh是因为startup无论如何都会调用startup