2010-04-16 6 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 создан, но у него нет строк или столбцов. Поэтому я предполагаю, что хранилище данных или макет не передаются правильно. Однако, похоже, что в момент создания значения theStore и layout верны.

Предложения, пожалуйста, или действительно рабочий пример программной сетки могут решить проблему.

ответ

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

Смежные вопросы