2012-12-19 41 views
0

我通過類似於下面的for循環創建了幾個TextInput框。 NumberOfSelections變量將根據用戶的輸入而有所不同。運行時從動態創建的TextInput字段中獲取Flex TextInput.text

for(var i:int=1; i <= NumberOfSelections; i++){ 
      InputField = new TextInput; 
      InputField.id = "Name" + i 
      InputField.text = "2" 
      HGroup1.addElement(InputField); 
    } 

了TextInput文本編輯,用戶將投入數,然後按一個計算按鈕將調用一個新的功能。我如何從所有TextInput字段獲取信息。例如,如果NumberOfSelections是4,我將如何獲得用戶輸入的所有4個數字以將它們添加在一起。是否有可能使用的唯一ID名稱

非常感謝

回答

0

爲您創建它們必須參考保存到田間地頭。我建議將它們存儲在磁盤陣列:

// somewhere in your code; define the variable 
public var textBoxArray : Array = new Array(); 

// somewhere in some method create the textBoxes 
for(var i:int=1; i <= NumberOfSelections; i++){ 
     InputField = new TextInput; 
     InputField.id = "Name" + i 
     InputField.text = "2" 
     HGroup1.addElement(InputField); 
     textBoxArray.push(InputField); 
} 
+0

不錯的一個Flextra的,完美的工作 – Hammer

0

使用[]引用到你輸入:

for(var i:int=1; i <= NumberOfSelections; i++){ 
    someVariable = this["Name" + i].text; 
} 
1

Flextra的答案是正確的definitly。我只是想添加其他兩個選項:在HGroup的孩子

for (var i:i=0; i<hGroup1.numElements; i++) { 
    var inputField:TextInput = hGroup1.getElementAt(i) as TextInput; 
    if (inputField) doSomthingWith(inputField.text);  
} 

注意,從一個「最佳實踐」的觀點,這不是一個很漂亮的做法。
一個有些更好的辦法可能是

溝動態實例化和使用,而不是DATAGROUP

因爲這正是一個DATAGROUP的意思做。

<s:DataGroup dataProvider="{dp}"> 
    <s:itemRenderer> 
     <fx:Component> 
      <s:ItemRenderer> 
       <s:TextInput text="@{data.myValue}"/> 
      </s:ItemRenderer> 
     </fx:Component> 
    </s:itemRenderer> 

    <s:layout> 
     <s:HorizontalLayout/> 
    </s:layout> 
</s:DataGroup> 

注意,myValue財產必須申報綁定這個工作。
您現在可以簡單地遍歷dp中的項目來執行計算,並讓框架處理動態實例化。如果您需要添加/刪除TextInput,只需將項目添加/刪除到dp。在我看來,這是迄今爲止最乾淨的解決方案,因爲它很好地將您的視圖與模型分開。

+0

這自然不會給用戶編輯訪問 - 你可能直接抓住itemRenderer並詢問,但它不會反映在dataProvider中。一種選擇是將此示例轉換爲「DataGrid」。 –

+0

@ MichaelBrewer-Davis是的。爲自己運行代碼。 – RIAstar

+0

+1 b/c我喜歡使用DataGroup的建議。 – JeffryHouser