2013-02-06 109 views
3

我有一個看起來像這樣的火花形式。我試圖通過表單循環,並將每個DropDownList的id推送到一個數組中。在Flex中循環顯示兒童4

我能夠成功地跟蹤表單項目的ID。但我無法使用任何用於訪問兒童的方法來獲取DropDownList的ID,而我使用的是Flex 3。我是新的Flex 4,經過一些閱讀後,我明白其由於某些與火花結構有關的原因。

這是表格。

<s:Form id="facilities" x="51" y="32" width="595" height="402"> 

     <s:FormHeading label="SWOT ANALYSIS FORMAT FOR PLOT PURCHASE" fontSize="15"> 

     </s:FormHeading> 

     <s:FormItem id = "petrolPumpsFormItem" required="true" width="464" label="Petrol Pumps:"> 
      <s:DropDownList id = "petrolPumps" width="220" prompt="Select distance from the plot" labelField="distance" > 
       <s:dataProvider> 
        <s:ArrayCollection> 

         <fx:Object distance="1-3 km" mark="100"/> 
         <fx:Object distance="3-6 km" mark="90"/> 
         <fx:Object distance="6-9 km" mark="80"/> 
         <fx:Object distance="9-12 km" mark="70"/> 
         <fx:Object distance="12-15 km" mark="60"/> 
         <fx:Object distance="15-18 km" mark="50"/> 

        </s:ArrayCollection> 
       </s:dataProvider> 
      </s:DropDownList> 
     </s:FormItem> 

     <s:FormItem id="filmTheatreFormItem" required="true" width="464" label="Film Theatre:"> 
      <s:DropDownList id="filmTheatre" width="220" prompt="Select distance from the plot" labelField="distance" > 
       <s:dataProvider> 
        <s:ArrayCollection> 

         <fx:Object distance="1-3 km" mark="100"/> 
         <fx:Object distance="3-6 km" mark="90"/> 
         <fx:Object distance="6-9 km" mark="80"/> 
         <fx:Object distance="9-12 km" mark="70"/> 
         <fx:Object distance="12-15 km" mark="60"/> 
         <fx:Object distance="15-18 km" mark="50"/> 

        </s:ArrayCollection> 
       </s:dataProvider> 
      </s:DropDownList> 
     </s:FormItem> 

     <s:FormItem id= "atmFormItem" required="true" width="464" label="ATM:"> 
      <s:DropDownList id= "atm" width="220" prompt="Select distance from the plot" labelField="distance" > 
       <s:dataProvider> 
        <s:ArrayCollection> 

         <fx:Object distance="1-3 km" mark="100"/> 
         <fx:Object distance="3-6 km" mark="90"/> 
         <fx:Object distance="6-9 km" mark="80"/> 
         <fx:Object distance="9-12 km" mark="70"/> 
         <fx:Object distance="12-15 km" mark="60"/> 
         <fx:Object distance="15-18 km" mark="50"/> 

        </s:ArrayCollection> 
       </s:dataProvider> 
      </s:DropDownList> 
     </s:FormItem> 

    </s:Form> 

我可以像這樣獲得對Form的支持。 '設施'是表單的名稱。

for (var i:int = 0 ;i <= facilities.numElements-1;i++) 
    { 
    var item:IVisualElementContainer = facilities.getElementAt(i) as IVisualElementContainer; 
    trace(item); 
    } 

我試過這個鏈接http://www.igorcosta.org/?p=366並試圖使用那裏給出的類。

問題是發生錯誤。 Flash Builder將我帶到代碼中第二個函數的第二個循環中,並顯示那裏使用的item.numElements正在創建問題。我試圖在我的代碼中使用item.numElements(上面顯示的那個符合FormItem標識的代碼),它也不起作用。任何人都有任何線索?

+0

我在這裏收到混合信號。你是什​​麼意思numElements「不工作」你有編譯器錯誤?還是運行時錯誤?什麼是錯誤?在你的循環中,你不能將你的項目保存到一個ArrayCollection中,作爲DropDownList的dataProvider的來源嗎? – JeffryHouser

+0

您是否閱讀了Igor Costa對該文章的評論?我非常贊同第一個(由Badu):將表單項值綁定到模型對象並處理該模型對象。 IMO在一個企業級的Flex應用程序中,你永遠不應該通過循環視覺元素來訪問數據。 – RIAstar

+0

當我把痕跡(item.numElements);在我的循環中,我得到這個錯誤。 TypeError:錯誤#1009:無法訪問空對象引用的屬性或方法。 –

回答

3

在您的for循環中,facilities.getElementAt(i)將返回一個IVisualElement,而不一定是一個IVisualElementContainer。

嘗試用準備:

var item:IVisualElement = facilities.getElementAt(i); 
trace(item); 
var itemContainer:IVisualElementContainer = item as as IVisualElementContainer; 

if (itemContainer) { 
    trace(itemContainer.numElements); 
} 

這應該給你你要尋找的結果!