0

我曾尝试使用 dgrid (使用他们的示例)为网格布局实现一个类,但是在加载我的网格时出现此错误(subRows 未定义)。我的代码看起来像这样:

define([
    "dojo/_base/declare",
    "dojo/_base/lang",
    "dgrid/Grid",
    "dgrid/Keyboard", 
    "dgrid/Selection"
], function(
    declare,
    lang,
    Grid,
    Keyboard, 
    Selection
){

    return declare([Grid, Keyboard, Selection], {

            columns: {
                first: "First Name",
                last: "Last Name",
                age: "Age"
            },
            selectionMode: "single", // for Selection; only select a single row at a time
            cellNavigation: false, // for Keyboard; allow only row-level keyboard navigation

         constructor: function() {
              var data = [
            { first: "Bob", last: "Barker", age: 89 },
            { first: "Vanna", last: "White", age: 55 },
            { first: "Pat", last: "Sajak", age: 65 }
            ];

            this.renderArray(data);
        }
    });
});

并像这样调用/创建它,

app.gridLayout = new GridLayout().placeAt(document.body);
4

1 回答 1

2

将您的constructor代码放入postCreate方法中:

return declare([Grid, Keyboard, Selection], {

    columns: {
        first: "First Name",
        last: "Last Name",
        age: "Age"
    },

    selectionMode: "single",
    cellNavigation: false,

    postCreate: function() {
        var data = [
            { first: "Bob", last: "Barker", age: 89},
            { first: "Vanna", last: "White", age: 55},
            { first: "Pat", last: "Sajak", age: 65}
        ];

        this.renderArray(data);
    }
});

另请注意dgrid,不是dijit来最小化其依赖关系,因此它没有placeAt()方法。您在这里有两个选择:

  1. 将占位符的DOM 节点id 字符串作为第二个参数提供给构造函数:

    var gridLayout = new GridLayout({}, "placeholder");
    
  2. 通过子类化成为dgrid一个dijitdijit/_WidgetBase以使用gridLayout.placeAt("placeholder")

    declare([_WidgetBase, Grid, Keyboard, Selection], {});
    
于 2012-06-19T00:50:19.633 回答