簡體   English   中英

在Flex Datagrid中動態填充comboBox提供程序

[英]Dynamically fill comboBox providers in Flex Datagrid

我正在嘗試將comboBox的動態添加到DataGrid,對於每個comboBox,我希望有一個唯一的dataProvider。 因此,例如,我建立了一個網格,如下所示:

<s:DataGrid id="testGrid"
            horizontalCenter="0"
            width="100%"
            dataProvider="{testArr}"
            gridClick="handleTestGridClick(event)">
    <s:columns>
        <s:ArrayList>
            <s:GridColumn dataField = "valName" headerText="Name"/>
            <s:GridColumn dataField = "testVals" headerText="Selections>
                <s:itemRenderer>
                    <fx:Component>
                        <s:GridItemRenderer>
                            <s:ComboBox id="foo" width="300" dataProvider="{data.testVals}"/>
                        <s:GridItemRendeder>
                    </fx:Component>
                </s:itemRenderer>
        </s:ArrayList>
    </s:columns>
</s:DataGrid>

在我的動作腳本中,我有一個HTTPService函數,該函數返回以以下方式格式化的JSON數據:

my $store = { "valName"  => $$data[$i][0], #a string
              "testVals" => [@arr]} #array of strings

HTTPService的結果處理程序:

private function handleResults(event:ResultEvent):void
{
   var str:String = String(event.result);
   var temp:Object = JSON.parse(str);
   testArr = new ArrayCollection(ArrayUtil.toArray(temp));
}

當我嘗試填充網格時,第一列將顯示我期望的“ valName”,但comboBox仍為空。 使用gridClick事件顯示所選行的dataProvider會顯示以下內容(請注意,此更改取決於我的提供程序,但始終顯示正確的數據):

(Object)#0
  testVals=(Array)#1
   [0] "test1"
   [1] "test2"
  valName = "Blah"

誰能為我提供一些技巧,反饋等有關如何使testVal數組實際顯示在comboBox中的信息?

您應該從tmp對象獲得testVals數組,如下所示:

private function handleResults(event:ResultEvent):void
{
   var str:String = String(event.result);
   var temp:Object = JSON.parse(str);
   if(temp.testVals){
     testArr = new ArrayCollection(ArrayUtil.toArray(temp.testVals));
   }
}

不確定在這里如何獲取異常,但是testVals屬性應該是要成為數據提供者的ArrayCollection而不是Array?

試試這個,我很確定它應該可以工作:

var itemOne:Object = {};
itemOne.valName = "Item one";
itemOne.testVals = new ArrayCollection(["one", "two"]);

var itemTwo:Object = {};
itemTwo.valName = "Item two";
itemTwo.testVals = new ArrayCollection(["three", "four"]);

testArr = new ArrayCollection([itemOne, itemTwo]);

因此,基本上,您只需要在獲取數據后將所有testVal從Array轉換為ArrayCollection:

private function handleResults(event:ResultEvent):void
{
   var str:String = String(event.result);
   var temp:Object = JSON.parse(str);
   testArr = new ArrayCollection(ArrayUtil.toArray(temp));

   for (var i:int = 0; i < testArr.length; i++)
   {
       var item:Object = testArr[i];
       item.testVals = new ArrayCollection(item.testVals);
   }   
}

暫無
暫無

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

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