/ / Як програмно створити dijit.Dialog за допомогою dojox.grid.DataGrid - діалог, dojo, dojox.grid.datagrid

Як програмно створити dijit.Dialog з dojox.grid.DataGrid - діалог, додзе, dojox.grid.datagrid

У мене є така проблема:

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

Магазин данихGrids заповнений правильно і 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();
}
);

Можливо, я щось додав у неправильному порядку?

Також не знаю, чи мій спосіб поєднання / додавання віджетів доджо використання властивості domNode - це правильний спосіб робити речі.

Я не знаю, чи потрібно розміщувати вміст ContentPane, який я використовую Сітка всередині діалогу. Обидва варіанти поки не працювали.

Нарешті, я не впевнений, чи потрібен Діалогстатичні вимірювання правильно розміру На мій досвід, сам діалог не потребує статики ширина або висота, але я поки що не маю досвіду з додаванням динамічного компонента наприклад, Grid - яка може змінити розмір пізніше при запуску - до діалогового вікна.

Відповіді:

2 для відповіді № 1

Вам не потрібно спочатку показувати діалогове вікноперемагає призначення діалогу. Вам потрібно створити сітку, додати domNode до діалогового вікна, а потім показати діалогове вікно. Це працює для мене у всіх моїх кодах. Найкраще


2 для відповіді № 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();