2010-04-16 73 views
1

我正试图动态创建一个DataGrid。声明创建工作的罚款:Dojo 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小部件已经创建,但它没有行或列。所以我的猜测是数据存储或布局没有正确传递。但是,看起来在创建时theStorelayout的值是正确的。

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

回答

4

首先将网格附加到DOM,然后创建窗口小部件实例。

所以,简单地代替

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

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

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

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

重新排序非常感谢。 – djna 2010-04-16 15:12:18