3

私はこれに見える火花フォームを持っています。フォームをループして、個々の DropDownList の ID を配列にプッシュしようとしています。

フォーム項目の ID を正常に追跡できました。しかし、私が使用した子にアクセスするためにFlex 3であるメソッドのいずれかを使用してDropDownListのIDを取得することはできません.

これがフォームです。

<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 は、そのコード内の 2 番目の関数の 2 番目の for ループに移動し、そこで使用されている item.numElements が問題を引き起こしていることを示しました。コード内で item.numElements を使用しようとしましたが (上記の FormItem ID をトレースしたもの)、それも機能しませんでした。誰も手がかりを持っていますか?

4

1 に答える 1

3

for ループでは、facility.getElementAt(i) は IVisualElement を返しますが、必ずしも IVisualElementContainer ではありません。

試してみてください:

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

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

それはあなたが探している結果を与えるはずです!

于 2013-02-06T21:34:17.070 に答える