簡體   English   中英

隱藏的tabcontainer中的DGrid僅查詢dstore一次

[英]DGrid in a hidden tabcontainer only queries dstore one time

我在一系列選項卡中創建了幾個DGrid OnDemandGrids,每個選項卡都包含一個帶有網格的內容窗格。 網格的目標是提供范圍標題,id屬性等的Rest服務。首先/選定/可見的選項卡完全填充了對Rest服務的多次調用,這與預期的一樣。 其他選項卡中的某些選項可以正常運行,但它們的人口稀少,因此只需要調用該服務即可。 該選項卡僅顯示前25個,因為它僅查詢一次服務(數據存儲中有超過一千條記錄)。

因此,如果問題選項卡是在創建網格之前選擇的選項卡,則所討論的選項卡將調用其余服務兩次以填充網格的可見部分。 如果選項卡和網格是在選擇之前創建的,則只有第一個查詢發生(在打開選項卡之前)並且在網格中,其余查詢永遠不會被查詢。 我只能猜測未選中/未顯示選項卡,網格可能不知道要查詢多少來填充與選項卡匹配的網格大小。

測試代碼包含在下面,但是使用內部的REST服務。 我在網格中混入了DijitRegistry。 如果我遇到問題,然后單擊其中一列以在問題網格中進行排序,則所有內容均會正確填寫。 嘗試grid.resize並將網格直接放置在tabcontainer上沒有任何影響。

簡單的OnDemandGrid定位到與添加到tabcontainer的contentpane的href中的DOM id綁定的Rest服務相關聯,但會導致很多問題...

有什么建議嗎?

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Test dGrid</title>
  <link rel="stylesheet" href="dojo/dijit/themes/claro/claro.css">
  <link rel="stylesheet" href="dojo/dgrid/css/dgrid.css">
  <link rel="stylesheet" href="dojo/dgrid/css/skins/claro.css">
<style>
  .claro {
    font-family: Arial, Verdana, Helvetica, sans-serif;
    font-size: .75em;
    color: #000;
  }

  body, html {
    width:100%;
    height:100%;
    margin:0;
    padding:0;
    overflow:hidden;
  }

  #Grid1 {
    width: 100%;
    height: 100%;
  }

</style>
<script src="dojo/dojo/dojo.js" data-dojo-config="async:true, parseOnLoad:true, locale:'en'"></script>
<script>
 require([
     "dojo/ready",
     "dijit/registry",
     "dojo/_base/declare",
     "dgrid/OnDemandGrid",
     "dgrid/extensions/DijitRegistry",
     "dstore/Memory",
     "dstore/Rest",
     "dijit/layout/TabContainer",
     "dijit/layout/ContentPane"
 ],
 function (ready, registry, declare, Grid, DijitRegistry, Memory,Rest) {
     ready(function () {
         var mystore = new (declare([Rest]))({
                    target : "Rest/HR/Employees",
                    idProperty: "employeeID",
            });

         var datacolumns = {
                    employeeID : 'ID',
                    fname: "First Name",
                    lname: "Last Name",
                    username : 'User Name',
                    employeeNbr: "Employee Number",
                    unitName: "Unit Name",
                    inserted: "Inserted",
                    updated: "Updated",
                    updatedBy: "Updated By",
                    counter : 'count'
                    };
         var CustomGrid = declare([Grid, DijitRegistry]); 
         this.Grid1 = new CustomGrid({
             collection: mystore,
             columns: datacolumns,
             idProperty: "id"
         }, "Grid1");
         this.Grid1.startup();
     });
 });
</script>
</head>
<body class="claro">
<div id="TabContainer" data-dojo-type="dijit/layout/TabContainer" style="width:100%; height:100%" data-dojo-props="tabStrip:true">
    <div id="Tab1" data-dojo-type="dijit/layout/ContentPane" title="Emtpy" data-dojo-props="selected:true">
        Nothing here, just to keep tab 2 hidden until clicked on
    </div>
    <div id="Tab2" data-dojo-type="dijit/layout/ContentPane" title="Grid">
        <div id="Grid1"></div>
    </div>
    <div id="Tab3" data-dojo-type="dijit/layout/ContentPane" title="Empty">
        Nothing
    </div>
</div>
</body>
</html>

罪魁禍首是grid.startup() 注意另一個具有類似問題的問題,該問題提到了啟動調用的時間。 移動啟動調用,直到顯示選項卡之后( Contentpane onShow事件),然后理順了網格圖和Rest服務的查詢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM