我有以下问题:
以编程方式创建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本身不需要静态 宽度或高度,但到目前为止我没有添加动态组件的经验 比如网格 - 可能会在启动时稍后将其大小更改为对话框。
答案 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附加到对话框,然后显示对话框。这对我的所有代码都有用。 最好