2011-05-16 36 views
6

我有以下問題:如何以編程方式創建dijit.Dialog與dojox.grid.DataGrid

編程方式創建dijit.Dialog和dojox.grid.DataGrid(鏈接到一個全局變量數據存儲( dojo.store.Memory)),當對話框尺寸保持最小時,不顯示對話框的內容。

DataGrids Store被正確填充,Firebug在對話框中顯示Grid。

data = new dojo.data.ObjectStore(
    { objectStore: new dojo.store.Memory({data:[]}) }); 

data.put({id:0,name:'Franklin'}); 

showDialog = function(){ 
    var dlg = dijit.byId('myDlg'); 
    if(dlg){ 
    dlg.show(); 
    } 
    else{ 
    var cp = new dijit.layout.ContentPane({style:"width:500;height:500;"}); 
    var grid = new dojox.grid.DataGrid({ 
     store : data, 
     structure : [ 
     {field:'id',name:'ID',width:'50px'}, 
     {field:'name',name:'Name',width:'400px'}] 
    },cp); 

    dlg = new dijit.Dialog({ 
     id:'myDlg', 
     title:'Names', 
     content:cp.domNode 
    }); 

    grid.startup(); 
    dlg.show(); 
    } 
); 

也許我在錯誤的順序中添加了一些東西?

此外,我不知道我的方式組合/附加dojo小部件 使用domNode屬性是正確的做事方式。

我不知道我使用的ContentPane是否需要在對話框中放置 Grid。到目前爲止,兩種變體都沒有工作。

最後,我不確定對話框是否需要以及在哪裏需要靜態測量 的尺寸正確。根據我的經驗,對話本身並不需要靜態的寬度或高度,但我目前還沒有經驗,像Grid一樣添加一個動態組件 ,它可能會在啓動後更改它的大小)到一個對話框。

回答

2

下面是我的上述問題的一種可能的溶劑。 對話框需要到位並且在這種情況下可見。 只有在那之後,纔會創建網格,放置在對話框中並啓動。

對話框和網格都需要明確的維度。 如果對話框中有其他內容,它可能不需要額外的寬度信息。

var myDialog = dijit.byId('myDialog'); 
if(!myDialog){ 
    myDialog = new dijit.Dialog({ 
     id:'myDialog', 
     title:'test dialog', 
     style:'width:600px;height:600px;' 
    }); 
} 
myDialog.show(); 

var myMemoryStore = new dojo.store.Memory(
    {data:[ 
     {'id':'0','lastname':'Frank'}, 
     {'id':'1','lastname':'Herbert'}]}); 
var myObjectStore = new dojo.data.ObjectStore({objectStore:myMemoryStore }); 

var myStructure = [ 
    {field:'id',  name:'ID', width:'20px'}, 
    {field:'lastname', name:'NAME', width:'200px'}]; 

var myGrid = dijit.byId('myGrid'); 
if(!myGrid){ 
    myGrid= new dojox.grid.DataGrid({ 
     id:'myGrid', 
     store:myObjectStore , 
     structure:myStructure, 
     style:'width:400px;height:400px;' 
    }); 
} 

dojo.place(myGrid.domNode,myDialog.containerNode,'first'); 
myGrid.startup(); 
+0

這種溶劑對我有效,但在這個問題上查看我看到可能更好的溶劑 - 所以我再次打開這個問題來檢查這些問題。 – elfwyn 2011-11-01 15:58:53

+0

我做了同樣的事情。問題是如果你想在對話框中添加多個網格。我能夠做一個解決方法,但不知何故對話框不居中。 – Nap 2014-01-11 12:47:27

+0

@Nap我有同樣的問題,它沒有得到集中!不知道你是否把它整理出來了? – Saky 2017-08-16 08:17:04

2

您不應該首先顯示對話框,那樣會打敗對話框的目的。您需要創建網格,將domNode追加到對話框,然後顯示對話框。這對我的所有代碼都適用。 最好的