6

私は次の問題を抱えています:

プログラムで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();
  }
);

たぶん私は間違った順序で何かを追加しましたか?

また、domNodeプロパティを使用してdojoウィジェットを結合/追加する方法が正しい方法であるかどうかもわかりません。

グリッドをダイアログ内に配置するために、使用しているContentPaneが必要かどうかはわかりません。両方のバリアントはこれまで機能しませんでした。

最後に、ダイアログが正しくサイズ設定するために静的測定が必要かどうか、どこで必要かわかりません。私の経験では、ダイアログ自体は静的な幅や高さを必要としませんが、グリッドのような動的コンポーネント(起動時に後でサイズが変更される可能性があります)をダイアログに追加した経験はありません。

4

2 に答える 2

2

最初にダイアログを表示する必要はありません。これは、ダイアログを表示する目的に勝るものです。グリッドを作成し、domNodeをダイアログに追加してから、ダイアログを表示する必要があります。それは私のすべてのコードで機能します。一番

于 2011-09-28T16:27:16.680 に答える
2

上記の問題に対する1つの可能な解決策を次に示します。この場合、ダイアログを配置して表示する必要があります。その後、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();
于 2011-05-18T09:04:40.877 に答える