【问题标题】:How to programmatically create a dijit.Dialog with a dojox.grid.DataGrid如何使用 dojox.grid.DataGrid 以编程方式创建 dijit.Dialog
【发布时间】:2011-08-26 10:22:17
【问题描述】:

我有以下问题:

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

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 是否以及在何处需要静态测量 大小正确。以我的经验,对话框本身不需要静态 宽度或高度,但到目前为止我还没有添加动态组件的经验 就像 Grid - 稍后可能会在启动时更改其大小 - 到一个对话框。

【问题讨论】:

    标签: dialog dojo dojox.grid.datagrid


    【解决方案1】:

    您不需要先显示对话框,这超出了设置对话框的目的。您需要创建网格,将 domNode 附加到对话框,然后显示对话框。这适用于我的所有代码。 最好的

    【讨论】:

      【解决方案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();
      

      【讨论】:

      • 这个解决方案对我有用,但是回头看看这个问题,我发现可能有更好的解决方案 - 所以我再次打开这个问题来检查这些。
      • 我也做了同样的事情。问题是如果您尝试在对话框中添加多个网格。我能够做一个解决方法,但不知何故对话框没有居中。
      • @Nap 我有同样的问题,它没有得到中心!不知道你有没有整理出来?
      • @Saky 不,我仍然有同样的问题。
      猜你喜欢
      • 2019-03-30
      • 2014-07-27
      • 2012-09-30
      • 1970-01-01
      • 1970-01-01
      • 2011-04-23
      • 1970-01-01
      • 2013-03-10
      • 2013-11-15
      相关资源
      最近更新 更多