Javascript DojoDataGrid,编程创建

Javascript DojoDataGrid,编程创建,javascript,dojo,Javascript,Dojo,我正在尝试动态创建一个DataGrid。声明式创建工作正常: 数据来源: <span dojoType="dojo.data.ItemFileReadStore" jsId="theStore" url="dataonly001.json"> </span> 简单布局: <script type="text/javascript" > var layout = [ { field: 'custId',

我正在尝试动态创建一个DataGrid。声明式创建工作正常:

数据来源:

<span dojoType="dojo.data.ItemFileReadStore" 
    jsId="theStore" url="dataonly001.json">
  </span>
简单布局:

<script type="text/javascript" >    
  var layout = [ {
            field: 'custId',
            name: 'Id',                   
        } // more items elided ...
     ]; 
</script>
网格:

<body class="tundra" id="mainbody"> 
   <div id="grid"
     dojoType="dojox.grid.DataGrid"
     store="theStore"
     structure="layout"  
     autoWidth="true"     
 ></div>   
</body>
我可以很好地显示网格。相反,我希望动态创建网格。为了找出什么是坏的,我尝试使用完全相同的布局和存储,只删除网格声明并添加以下脚本:

  <script type="text/javascript" djConfig="parseOnLoad: true, debugAtAllCosts: true">

  dojo.addOnLoad(function(){
        // initialise and lay out home page
        console.log("Have a store:" + theStore);
        console.log("Have a structure:" + layout);

        var grid = new dojox.grid.DataGrid({
                id : "grid",
                store : theStore,
                clientSort : "true",
                structure : layout
        });
        grid.startup();

    dojo.place(grid.domNode, dojo.body(), "first");                     
  });

 </script>
我得到的效果是显示一个完全空的矩形。使用FireBug,我可以看到DataGrid小部件已创建,但它没有行或列。因此,我猜测数据存储或布局没有正确传递。但是,在创建时,存储和布局的值似乎是正确的


建议,或者一个编程网格的工作示例可能会解决这个问题。

首先将网格连接到DOM,然后创建小部件实例

所以简单地代替

grid.startup();
dojo.place(grid.domNode, dojo.body(), "first");  

您甚至可以在构造函数中设置每个Dojo小部件的容器节点

var grid = new dojox.grid.DataGrid({
    ⋮                     
}, dojo.byId('grid_container'));
grid.startup();

首先将网格连接到DOM,然后创建小部件实例

所以简单地代替

grid.startup();
dojo.place(grid.domNode, dojo.body(), "first");  

您甚至可以在构造函数中设置每个Dojo小部件的容器节点

var grid = new dojox.grid.DataGrid({
    ⋮                     
}, dojo.byId('grid_container'));
grid.startup();