2013-02-06 63 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); 
} 

这应该给你你要寻找的结果!