问题
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
id
string of a placeholder to the contructor as a 2nd parameter:var gridLayout = new GridLayout({}, "placeholder");
Make
dgrid
to be a dijit via subclassingdijit/_WidgetBase
to usegridLayout.placeAt("placeholder")
:declare([_WidgetBase, Grid, Keyboard, Selection], {});
来源:https://stackoverflow.com/questions/11090233/running-dojo-dgrid-subrows-is-undefined