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

时间:2011-05-16 12:46:52

标签: dialog dojo dojox.grid.datagrid

我有以下问题:

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

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是否需要放置 对话框中的网格。到目前为止,这两种变体都不起作用。

最后,我不确定Dialog是否需要静态测量 正确的大小。根据我的经验,Dialog本身不需要静态 宽度或高度,但到目前为止我没有添加动态组件的经验 比如网格 - 可能会在启动时稍后将其大小更改为对话框。

2 个答案:

答案 0 :(得分:2)

这是我上述问题的一种可能的解决方案。 在这种情况下,对话框需要到位并可见。 只有在那之后,Grid才会被创建,放在Dialog中并启动。

对话框和网格都需要明确的尺寸。 如果对话框包含其他内容,则可能不需要额外的宽度信息。

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();

答案 1 :(得分:2)

您不应该首先显示对话框,这样可以实现对话框的目的。您需要创建网格,将domNode附加到对话框,然后显示对话框。这对我的所有代码都有用。 最好