Как программно создать dijit.Dialog с помощью dojox.grid.DataGrid - PullRequest
6 голосов
/ 16 мая 2011

У меня следующая проблема:

Программно создавая dijit.Dialog и dojox.grid.DataGrid (связанный с глобальным хранилищем переменных данных (dojo.store.Memory)), содержимое диалога не отображается, в то время как размер диалога остается минимальным.

Хранилище DataGrids заполнено правильно, и Firebug показывает сетку в диалоге.

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 - который может изменить свой размер позже при запуске - на Dialog.

Ответы [ 2 ]

2 голосов
/ 28 сентября 2011

Вам не нужно сначала показывать диалог, который превосходит цель наличия диалога. Вам нужно создать сетку, добавить domNode в диалог, а затем показать диалог. Это работает для меня во всех моих кодах. Лучший

2 голосов
/ 18 мая 2011

Вот одно из возможных решений моей проблемы. Диалог должен быть на месте и видимым в этом случае. Только после этого Grid создается, помещается в диалог и запускается.

И диалогу, и сетке нужны точные размеры. Если в диалоге есть другое содержимое, ему может не потребоваться дополнительная информация о ширине.

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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...