2010-04-16 82 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