2011-03-28 5 views
0

私はいくつかのデータグリッドを持っています(データは一部のマップサービスから取得されています)。フレックスデータグリッド+タブナビゲータ

これらのデータグリッドをタブナビゲータの別々のタブに配置したいと考えています。最初のタブとは別に、すべては正常に動作し、常にデータグリッドなしで終了します。

私はcreation policy = "all"としてみましたが、最初のタブは常に空です。誰も最初のタブが常に空である理由について、何か考えがありますか?

すべての回避策。

おかげ

var box:HBox=new HBox(); 
var dg:DataGrid = new DataGrid(); 
dg.dataProvider = newAC; 
box.label=title.text; 
box.addChild(dg); 
tabNaviId.addChild(box); 
tabNaviId.selectedIndex=2; 
resultsArea.addChild(tabNaviId); 

DGがいっぱいにされているデータグリッドです。上記のコードはループにあり、各ループではHbox +データグリッドを作成しています。次に、Hboxをナビゲータに追加し、最後にresultsArea(キャンバス)にナビゲータを追加します。

上記のコードは、最初から大きく離れています。

最終結果は、データナビゲータを持たない最初のタブがタブナビゲータに表示されますが、残りのタブにはすべてデータグリッドがあります。なぜこのようなことが起こっているかについてのアイデア。 createDatagrid呼び出された関数へ

コール構成されています。別のMXMLコンポーネントで

dgCollection.addItem(parentApplication.resultsPanel.createDatagrid(token.name.toString() + " (" + recAC.length + " selected)", recAC, false, callsToMake)); 

をこの関数は

public function createDatagrid(titleText:String, recACAll:ArrayCollection, showContent:Boolean, callsToMake:Number):DataGrid 
     { 

      var dg:DataGrid = new DataGrid(); 
      var newAC:ArrayCollection = new ArrayCollection(); 
      var newDGCols:Array = new Array(); 

      for(var i:Number = 0; i < recACAll.length; i ++) 
      { 
       var contentStr:String = recACAll[i][CONTENT_FIELD]; 
       var featureGeo:Geometry = recACAll[i][GEOMETRY_FIELD]; 
       var iconPath:String = recACAll[i][ICON_FIELD]; 
       var linkStr:String = recACAll[i][LINK_FIELD]; 
       var linkNameStr:String = recACAll[i][LINK_NAME_FIELD]; 
       var featurePoint:MapPoint = recACAll[i][POINT_FIELD]; 
       var titleStr:String = recACAll[i][TITLE_FIELD]; 

       if(contentStr.length > 0) 
       { 
        var rows:Array = contentStr.split("\n"); 

        var tmpObj:Object = new Object(); 

        if(!showContent) 
        { 
         for(var j:Number = 0; j < rows.length; j++) 
         { 
          var tmpStr:String = rows[j] as String; 
          var header:String = tmpStr.substring(0,tmpStr.indexOf(":")); 
          var val:String = tmpStr.substring(tmpStr.indexOf(":") + 2); 
          if(header.length > 0) 
          { 
           tmpObj[header] = val; 
           if(newDGCols.length < rows.length - 1) 
           { 
            newDGCols.push(new DataGridColumn(header)); 
           } 
          } 
         } 
        } 
        else 
        { 
         if(newDGCols.length == 0) 
         { 
          newDGCols.push(new DataGridColumn(CONTENT_FIELD)); 
          newDGCols.push(new DataGridColumn(GEOMETRY_FIELD)); 
          newDGCols.push(new DataGridColumn(ICON_FIELD)); 
          newDGCols.push(new DataGridColumn(LINK_FIELD)); 
          newDGCols.push(new DataGridColumn(LINK_NAME_FIELD)); 
          newDGCols.push(new DataGridColumn(POINT_FIELD)); 
          newDGCols.push(new DataGridColumn(TITLE_FIELD)); 
         } 
        } 

        tmpObj[CONTENT_FIELD] = contentStr; 
        tmpObj[GEOMETRY_FIELD] = featureGeo; 
        tmpObj[ICON_FIELD] = iconPath; 
        tmpObj[LINK_FIELD] = linkStr; 
        tmpObj[LINK_NAME_FIELD] = linkNameStr; 
        tmpObj[POINT_FIELD] = featurePoint; 
        tmpObj[TITLE_FIELD] = titleStr; 

        newAC.addItem(tmpObj); 
       } 

       if(showHidePic.source == minSourceI) 
       { 
        showHidePic.source = minSource; 
       } 
       else if(showHidePic.source == maxSourceI) 
       { 
        showHidePic.source = maxSource; 
       } 
       curResults = curResults + recACAll.length; 

       if (curResults == 1) 
       { 
        showInfoWindow(tmpObj); 

        if(showContent) 
        { 
         parentApplication.maps.map.extent = featureGeo.extent; 
        } 
       } 
       else 
       { 
        showInfoWindow(null); 
        // Added to avoid the overview button problem (needs checking) 
        this.removeEventListener(MouseEvent.MOUSE_OVER, handleMouseOver, false); 
        this.removeEventListener(MouseEvent.MOUSE_MOVE,handleMouseOver,false); 
        this.removeEventListener(MouseEvent.MOUSE_OUT,handleMouseOut,false); 
        this.removeEventListener(MouseEvent.MOUSE_DOWN,handleMouseDrag,false); 
        this.removeEventListener(MouseEvent.MOUSE_UP,handleMouseDragStop,false); 
        this.parent.removeEventListener(MouseEvent.MOUSE_MOVE,handleParentMove,false); 
        this.parent.removeEventListener(MouseEvent.MOUSE_UP,handleMouseDragStop2,false); 
        maximizePanel(); 
       } 

      } 

      dg.dataProvider = newAC; 
      dg.columns = newDGCols; 
      dg.rowCount = newAC.length; 

      var totalDGCWidth:Number = 0; 

      for(var m:Number = 0; m < dg.columns.length; m++) 
      { 
       var dgc2:DataGridColumn = dg.columns[m]; 

       /*if(dgc2.headerText.toUpperCase()==LINK_FIELD.toUpperCase()){ 

       //dgc.itemRenderer=new ClassFactory(CustomRenderer); 
       dgc2.itemRenderer=new ClassFactory(CustomRenderer); 
       }*/ 
       var dgcWidth2:Number = dgc2.headerText.length * CHAR_LENGTH; 

       for(var l:Number = 0; l < newAC.length; l++) 
       { 
        var row2:Object = newAC.getItemAt(l) as Object; 
        var rowVal2:String = row2[dgc2.headerText]; 

        if(rowVal2 != null) 
        { 
         var tmpLength2:Number = rowVal2.length * CHAR_LENGTH; 

         if(tmpLength2 < CHAR_MAX_LENGTH) 
         { 
          if(tmpLength2 > dgcWidth2) 
          { 
           dgcWidth2 = tmpLength2; 
          } 
         } 
         else 
         { 
          dgcWidth2 = CHAR_MAX_LENGTH 
          break; 
         } 
        } 

       } 
       // Added by FT:to change the item renderer for link field 


       if(dgc2.headerText == GEOMETRY_FIELD || dgc2.headerText == CONTENT_FIELD || 
        dgc2.headerText == ICON_FIELD || dgc2.headerText == LINK_FIELD || 
        dgc2.headerText == POINT_FIELD || dgc2.headerText == TITLE_FIELD || 
        dgc2.headerText == LINK_NAME_FIELD) 
       { 
        if(dgc2.headerText == CONTENT_FIELD && showContent) 
        { 
         //something 
        } 
        else 
        { 

         dgcWidth2 = 0; 
        } 
       } 

       totalDGCWidth += dgcWidth2; 
      } 

      dg.width = totalDGCWidth; 



      for(var k:Number = 0; k < dg.columns.length; k++) 
      { 
       var dgc:DataGridColumn = dg.columns[k]; 
       var dgcWidth:Number = dgc.headerText.length * CHAR_LENGTH; 
       for(var n:Number = 0; n < newAC.length; n++) 
       { 
        var row:Object = newAC.getItemAt(n) as Object; 
        var rowVal:String = row[dgc.headerText]; 

        if(rowVal != null) 
        { 
         var tmpLength:Number = rowVal.length * CHAR_LENGTH; 

         if(tmpLength < CHAR_MAX_LENGTH) 
         { 
          if(tmpLength > dgcWidth) 
          { 
           dgcWidth = tmpLength; 
          } 
         } 
         else 
         { 
          dgcWidth = CHAR_MAX_LENGTH 
          break; 
         } 
        } 

       } 
       if(dgc.headerText == GEOMETRY_FIELD || dgc.headerText == CONTENT_FIELD || 
        dgc.headerText == ICON_FIELD || dgc.headerText == LINK_FIELD || 
        dgc.headerText == POINT_FIELD || dgc.headerText == TITLE_FIELD || 
        dgc.headerText == LINK_NAME_FIELD) 
       { 
        if(dgc.headerText == CONTENT_FIELD && showContent) 
        { 
         dgc.visible = true; 
        } 
        else 
        { 

         dgc.visible = false; 
         dgcWidth = 0; 
        } 
       } 

       if(dgc.headerText == LINK_COL_NAME) 
       { 
        dgcWidth = LINK_COL_WIDTH; 
       } 

       dgc.width = dgcWidth; 
      } 

      dg.addEventListener(ListEvent.ITEM_CLICK,rowClicked); 
      dg.addEventListener(ListEvent.ITEM_ROLL_OVER,mouseOverRow); 
      dg.addEventListener(ListEvent.ITEM_ROLL_OUT,mouseOutRow); 

      var title:Text = new Text(); 
      title.text = titleText; 
      title.setStyle("fontWeight","bold"); 

      //resultsArea.addChild(title); 

      return dg; 


      //tabNaviId.selectedIndex=2;  


     } 
     public function populateGrid(dgCollection:ArrayCollection):void{ 


      for(var k:Number = 0; k < dgCollection.length; k++) 
      { 
       var box:HBox=new HBox(); 
       var dg2:DataGrid=dgCollection.getItemAt(k) as DataGrid; 
       box.label="some"; 
       box.addChild(dg2); 
       tabNaviId.addChild(box); 

      } 
      resultsArea.addChild(tabNaviId); 
     } 

<mx:Image id="showHidePic" click="toggleResults()"/> 
<mx:VBox y="20" styleName="ResultsArea" width="100%" height="100%"> 
    <mx:HBox> 
     <mx:Button label="Export to Excel" click="downloadExcel()"/> 
     <mx:Button label="Clear" click="clear()" /> 
    </mx:HBox> 
    <mx:VBox id="resultsArea" styleName="ResultsContent" paddingTop="10" paddingLeft="10" paddingRight="10" verticalScrollPolicy="off" horizontalScrollPolicy="off"> 
     <mx:TabNavigator id="tabNaviId" width="622" height="274" creationPolicy="all"> 

     </mx:TabNavigator> 

    </mx:VBox> 
</mx:VBox> 
+1

投稿ソースが便利です!それがなければ私たちはあなたを助けるのに苦労するでしょう。 – sean

+1

合意しました。コードを入力してください。creationPolicy = "all"を使用しないでください –

+0

ありがとうございました。 – Abstract

答えて

0

抽象として宣言されたタブナビゲータが存在する、ことができます私たちはあなたが言及するループを含む完全なコードと、あなたが作成したコードを取得しますTabNavigatorを食べましたか?

TabNavigatorにはすでに初期の子があり、作成しているすべての子がそれ以降に追加されている可能性があります。

+0

今投稿をご覧ください。作成されたデータグリッドに正しいデータが含まれているため、データは問題ではないことが確認できます。最初のタブの最初のデータグリッドは決して表示されません。 – Abstract

+0

誰でも最初のタブのデータグリッドが生成されていない理由を知ることができます。 – Abstract

+0

更新:私は最初に動作するようにしましたが、2回目にcreateDataGrid関数に入るとタブは空になります。 – Abstract