如何以编程方式使用dojox.grid.DataGrid创建dijit.Dialog

elf*_*wyn 6 dojo dialog dojox.grid.datagrid

我有以下问题:

以编程方式创建dijit.Dialog和dojox.grid.DataGrid(链接到全局变量数据存储(dojo.store.Memory)),当对话框大小保持最小时,不显示对话框的内容.

DataGrids Store正确填充,Firebug在Dialog中显示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();
  }
);
Run Code Online (Sandbox Code Playgroud)

也许我添加了错误的顺序?

另外我不知道使用domNode属性组合/附加dojo小部件的方式是否正确.

我不知道我使用的ContentPane是否需要将Grid放在Dialog中.到目前为止,这两种变体都不起作用

最后,我不确定Dialog是否需要静态测量以及正确调整大小.根据我的经验,Dialog本身并不需要静态宽度或高度,但到目前为止我没有经验添加像Grid这样的动态组件 - 可能会在启动时将其大小更改为对话框.

elf*_*wyn 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();
Run Code Online (Sandbox Code Playgroud)