2012-02-29 124 views
3

Dojoデータ・グリッドを表示または非表示にする最良の方法は何ですか?Dojoグリッドの表示/非表示またはトグル

データグリッドを表示する前に、ユーザー入力が必要なページをコーディングしています。したがって、理想的には、ページが読み込まれるときに、ページのグリッドセクションは空白/空白になります。ユーザが特定の入力を行うと、グリッドが指定された場所に表示されます。

style = "display:none"を設定してjsをコーディングしてdisplay = "block"を設定し、noneとblockを切り替えますが、グリッドのアウトラインのみを表示しています。

style = "display:none"を省略すると、ロード時にガードが表示され、同じコードで問題なく後で表示/非表示できます。

ロード時にdisplay = noneと設定したときの動作が異なるのは、私が困惑しています。この問題を解決する方法は何ですか。

洞察力は大変ありがとうございます。

<html lang="en"> 
<head> 
    <meta charset="utf-8"> 
    <title>Dojo Test</title> 

     <link rel="stylesheet" href="/cv/static/css/demo.css" media="screen"> 
     <link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/dojo/1.7.1/dijit/themes/claro/claro.css"> 
    <script src="http://ajax.googleapis.com/ajax/libs/dojo/1.7.1/dojo/dojo.js" data-dojo-config="isDebug: true, async: true"></script> 
     <link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/dojo/1.7.1/dojo/resources/dojo.css"> 

     <link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/dojo/1.7.1/dojox/grid/resources/Grid.css"> 
     <link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/dojo/1.7.1/dojox/grid/resources/claroGrid.css"> 

     <style type="text/css"> 

     #target-grid{ 
       width: 950px; 
       height: 350px; 
       /*visibility:hidden;*/ 
       display: none; 
       position:relative; left:0; top:0; z-index:10; 
       border:1px solid #ebebeb; border-top:1px solid #f2f2f2; 
       -webkit-border-radius:5px; -moz-border-radius:5px; border-radius:5px; 
       behavior:url('/media/css/PIE.htc'); 
       float: left; 


     } 
     </style> 




     <script> 

     var myStore, dataStore, grid; 

     require([ 

      "dojo/store/JsonRest", 

      "dojo/store/Memory", 

      "dojo/store/Cache", 

      "dojox/grid/DataGrid", 

      "dojo/data/ObjectStore", 

      "dojo/query", 

      "dojo/domReady!" 

     ], function(JsonRest, Memory, Cache, DataGrid, ObjectStore, query){ 

      myStore = Cache(JsonRest({target:"http://127.0.0.1:8080/cv/insight/data/2/"}), Memory()); 

      grid = new DataGrid({ 

       store: dataStore = ObjectStore({objectStore: myStore}), 

       structure: [ 

        {name:"State Name", field:"name", width: "200px"}, 

        {name:"Abbreviation", field:"id", width: "200px", editable: true} 

       ] 

      }, "target-node-id"); // make sure you have a target HTML element with this id 


          grid.startup(); 

      query("#save").onclick(function(){ 

       dataStore.save(); 

      }); 

     }); 

    </script> 





     <script> 
     require(["dijit/form/Button", "dojo/_base/Deferred", "dojo/_base/xhr", "dojo/_base/array", "dojo/dom-construct", "dojo/dom","dojo/domReady!"], 
          function(Button,Deferred, xhr, baseArray, domConstruct, dom) { 
      var button = new Button({ 
       label: "Click Me!", 
       onClick: function(){ 

             ....... 





            } 
      }, "btn"); 
      button.startup(); 

      var button2 = new Button({ 
       iconClass:"dijitIconNewTask", 
       showLabel:false, 
       label: "Click Me!", // analogous to title when showLabel is false 
       onClick: function(){ 




             var ele = dom.byId("target-grid"); 

             if(ele.style.display == "block") { 

               dojo.setStyle("target-grid", {"display": "none"}); 
               //dojo.style(ele.domNode, 'display', 'none'); 

             } 
             else { 


               dojo.setStyle("target-grid", {"display": "block"}); 
               //dojo.style(ele.domNode, 'display', 'block'); 
               //ele.startup(); 
               ele.resize(); 


             } 
            } 

      }, "btn2"); 

      button2.startup(); 
     }); 

    </script> 
     </script> 

</head> 
<body class="claro"> 
    <h1>Demo</h1> 
      <button id="btn"></button> 
      <button id="btn2"></button> 
    <ul id="userlist"></ul> 
      <div id="result1"></div> 

      <div id="target-grid"></div> 



</body> 

答えて

3

私は、表示属性を設定することが正しいことだと思います。正しく覚えていれば、グリッド上でもサイズ変更を呼び出す必要があります。グリッドが隠れている場合は、起動メソッドが呼び出されますか?これを行う必要があるかもしれません。私は、次のHTMLを使用したコメント

に対応して

// to hide grid 
dojo.style(grid.domNode, 'display', 'none'); 

// to show grid 
dojo.style(grid.domNode, 'display', ''); 
// grid.startup(); // needed??? 
grid.resize(); 

。サイズ変更呼び出しがなければ、グリッドの輪郭が見えます。サイズ変更の呼び出しでは動作します。

<div dojoType="dojo.data.ItemFileReadStore" jsId="jsonStore" url="dojox/grid/tests/support/countryStore.json" ></div> 

<table dojoType="dojox.grid.DataGrid" 
    jsid="grid" id="grid" 
    store="jsonStore" query="{ name: '*' }" rowsPerPage="20" rowSelector="20px" 
    style="width: 400px; height: 200px; display:none;"> 
    <thead> 
     <tr> 
      <th field="name" width="300px">Country/Continent Name</th> 
      <th field="type" width="auto">Type</th> 
     </tr> 
    </thead> 
</table> 

私は店のデータはコードで作成しても、次の

}, "target-node-id"); // make sure you have a target HTML element with this id 
//to 
}, "target-grid"); // make sure you have a target HTML element with this id 

ele.resize(); 
// to 
grid.resize(); 

を変更し、それが働いたように、あなたが投稿したコードを更新しました。

+0

これは私がやったことですが、不思議なことに、うまくいきません! :( – rhm2012

+0

Dojoのどのバージョン?上の例は1.6.1です。 –

+0

は、コードを投稿したばかりです。eleはdomElementです(ウィジェットでresizeが呼び出されると予想されます) –

0

このためハックがあります:

私は、ディスプレイ上にグリッド上)(フィールドセットを使用して、ソートと呼ばれます。仕事をしているようだ。あなたのトグルプロシージャコールでその後

<fieldset id="target-grid1" style="display:none"> 
    <div id="target-grid"></div> 
</fieldset> 

dojo.setStyle("target-grid", {"display": "block"}); 
grid.sort(); 
0

あなたが画面の外に最初にそれを配置し、あなたはそれが(道場がツールチップでこれを行います)表示したい時に画面上にそれを移動することができます。

関連する問題