问题
I have tried implementing a class for a grid layout using dgrid (using their sample), but I get this error when loading my grid (subRows is undefined). My code looks something like this:
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);
}
});
});
And calling/creating it like this,
app.gridLayout = new GridLayout().placeAt(document.body);
回答1:
Place your constructor code into postCreate method:
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);
}
});
Also note dgrid is not dijit to minimize its dependencies and therefore it has not placeAt() method. You have two options here:
Provide DOM node or
idstring of a placeholder to the contructor as a 2nd parameter:var gridLayout = new GridLayout({}, "placeholder");Make
dgridto be a dijit via subclassingdijit/_WidgetBaseto usegridLayout.placeAt("placeholder"):declare([_WidgetBase, Grid, Keyboard, Selection], {});
来源:https://stackoverflow.com/questions/11090233/running-dojo-dgrid-subrows-is-undefined