2012-05-24 48 views
0

我已經使用actionscript動態創建了textinput,但是當我從前端輸入輸入值並將其保存到db(文件)時,它只顯示在db中輸入的最後一個值。 plz幫助如何捕獲在actionscript和flex中動態創建的textinput值?

for(var i:int=0;i<5;i++){ 
     var txt1:TextInput=new TextInput(); 
    txt1.width=88; 
    createtxtinput(txt1); 
    txt1.addEventListener(Event.CHANGE,test123(i,txt1)) 

var txt2:TextInput=new TextInput(); 
    txt2.width=88; 
    createtxtinput(txt2); 
    txt2.addEventListener(Event.CHANGE,test123(i,txt2)) 
    } 

public function test123(x:int,txtmaterial:TextInput){ 
    return function(event){ 
    // 
     setValuestable2multi(x,txtmaterial.text); 
// Alert.show(x.toString()); 
    } 

} 
+0

爲什麼要動態添加TextInputs?只需使用帶有TextInput的ItemRenderer的List或DataGroup即可。 – RIAstar

+0

我想從文本輸入保存數據到數據庫 –

+0

也許您應該擴展TextInput類並覆蓋設置文本(str:String):void {...,並在那裏添加dispatchEvent? – turbosqel

回答

1
<?xml version="1.0" encoding="utf-8"?> 
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
       xmlns:s="library://ns.adobe.com/flex/spark" 
       creationComplete="_creationCompleteHandler(event)"> 

    <s:layout> 
     <s:VerticalLayout /> 
    </s:layout> 

    <fx:Script> 
     <![CDATA[ 
     import flash.events.FocusEvent; 
     import mx.events.FlexEvent; 
     import spark.components.TextInput; 
     import spark.events.TextOperationEvent; 

     //--------------------------------------------------------------------- 
     // 
     // constants 
     // 
     //--------------------------------------------------------------------- 
     /** 
     * @private 
     * TextInput instances id prefix 
     */ 
     private const TEXT_INPUT_ID_PREFIX:String = "textInput"; 

     //--------------------------------------------------------------------- 
     // 
     // private methods 
     // 
     //--------------------------------------------------------------------- 
     /** 
     * @private 
     * 
     * Create TextInput instances 
     */ 
     private function _createTextInputs():void 
     { 
      var count:uint = 5; 
      var textInput:TextInput; 
      for (var i:uint; i < count; i++) 
      { 
       textInput = new TextInput(); 
       textInput.id = TEXT_INPUT_ID_PREFIX + i.toString(); 

       // listen TextOperationEvent.CHANGE event 
       textInput.addEventListener(TextOperationEvent.CHANGE, _textInput_changeHandler); 

       // or listen FocusEvent.FOCUS_OUT 

       //textInput.addEventListener(FocusEvent.FOCUS_OUT, _textInput_focusOutHandler); 
       addElement(textInput); 
      } 
     } 

     /** 
     * @private 
     * 
     * Get TextInput instance index and value and pass in this values to "saving to database" method 
     * 
     * @param textInput TextInput instance 
     */ 
     private function _handleChangesInTextInput(textInput:TextInput):void 
     { 
      var textInputIndex:int = parseInt(textInput.id.replace(TEXT_INPUT_ID_PREFIX, ""), 10); 
      var textInputValue:String = textInput.text; 

      _saveTextInputDataToDatabase(textInputIndex, textInputValue); 
     } 

     /** 
     * @private 
     * 
     * Mockup method for saving to database 
     * 
     * @param textInputIndex TextInput instance index 
     * @param textInputValue TextInput instace value 
     */ 
     private function _saveTextInputDataToDatabase(textInputIndex:int, textInputValue:String):void 
     { 
      //TODO save data to database 
     } 

     //--------------------------------------------------------------------- 
     // 
     // handlers 
     // 
     //--------------------------------------------------------------------- 
     /** 
     * @private 
     * 
     * Application FlexEvent.CREATION_COMPLETE handler 
     * 
     * @param event 
     */ 
     private function _creationCompleteHandler(event:FlexEvent):void 
     { 
      _createTextInputs(); 
     } 

     /** 
     * @private 
     * 
     * TextInput instances TextOperationEvent.CHANGE handler 
     * 
     * @param event 
     */ 
     private function _textInput_changeHandler(event:TextOperationEvent):void 
     { 
      _handleChangesInTextInput(TextInput(event.target)); 
     } 

     /** 
     * @private 
     * 
     * TextInput instances FocusEvent.FOCUS_OUT handler 
     * 
     * @param event 
     */ 
     private function _textInput_focusOutHandler(event:FocusEvent):void 
     { 
      _handleChangesInTextInput(TextInput(event.currentTarget)); 
     } 
     ]]> 
    </fx:Script>  
</s:Application> 

如果你會聽TextOperationEvent.CHANGE事件,然後按任何鍵(當的TextInput輸入焦點)將導致_handleChangesInTextInput方法將被調用。

如果你會聽FocusEvent.FOCUS_OUT事件,然後_handleChangesInTextInput方法將被調用後,一些TextInput將失去輸入焦點。

相關問題