【问题标题】:How can I Call a function within a function using action script 3.0如何使用操作脚本 3.0 在函数中调用函数
【发布时间】:2014-04-22 07:53:10
【问题描述】:

如何使用动作脚本 3.0 在另一个函数中调用函数 在这里,我正在使用 WSDL Web 服务并在我的数据网格中获取数据。我想把这些数据放到我的数据库表中。

我在与 WebService 关联的 Button click 事件上调用 Follow 函数。

private function Login():void {
                // Get Data from WebService and fill datagrid when you fist invoke the application
                SignIn1Result2.token = vtrServices.SignIn1(txtUserName.text, txtPassword.text);
                stmt.sqlConnection = this.isDbConnected(conn);
                func:addEventListener(SQLEvent.OPEN,insertContact);

                 /* insertContact(SignIn1Result2.lastResult.UserId,SignIn1Result2.lastResult.UserName,SignIn1Result2.lastResult.ContactName,SignIn1Result2.lastResult.Password,SignIn1Result2.lastResult.Salt); */
                }

而我的 WebService 定义是

  <fx:Declarations>
            <!-- Place non-visual elements (e.g., services, value objects) here -->
            <mx:WebService 
                id="ws" 
                wsdl="http://localhost:2690/vtrServices.asmx?wsdl"> 
                <mx:operation 
                    name="GetEmployees" 
                    resultFormat="object"
                    result="Login()"
                    />

            </mx:WebService>
            <vtrservices:VtrServices id="vtrServices"
                                     fault="Alert.show(event.fault.faultString + '\n' + event.fault.faultDetail)"
                                     showBusyCursor="true"/>
            <s:CallResponder id="SignIn1Result2"/>
 </fx:Declarations>

我的控件

<mx:Panel x="41.5" y="66" width="714.5" height="237" layout="absolute" title="ASP.NET WebService + Flex Demonstration">
        <mx:HBox height="95%" width="95%" horizontalCenter="0" verticalCenter="0">
            <mx:DataGrid id="datagrid" width="499" height="100%"
                         dataProvider="{SignIn1Result2.lastResult}">
                <mx:columns>
                    <mx:DataGridColumn headerText="User Id" dataField="UserId"/>
                    <mx:DataGridColumn headerText="UserName" dataField="UserName"/>
                    <mx:DataGridColumn headerText="ContactName" dataField="ContactName"/>
                    <mx:DataGridColumn headerText="Password" dataField="Password"/>
                    <mx:DataGridColumn headerText="Salt" dataField="Salt"/>
                </mx:columns>
            </mx:DataGrid>

            <mx:Form x="608" y="74" width="100%" height="100%" borderStyle="solid" id="UserLogin">

                <mx:FormItem label="UserName">
                    <mx:TextInput width="106" id="txtUserName"/>
                </mx:FormItem>

                <mx:FormItem label="Password">
                    <mx:TextInput width="106" 
                                  displayAsPassword="true"
                                  id="txtPassword"/>
                </mx:FormItem>

                <mx:FormItem width="156" horizontalAlign="right">
                    <mx:Button label="Login" id="btnLogin" click="Login();"/>
                </mx:FormItem>

            </mx:Form>
        </mx:HBox>
    </mx:Panel>

下面的函数应该在 Login() 函数成功后调用,或者我可以在 Login() 函数中调用

private function insertContact(UserId:String, UserName:String,ContactName:String, Password:String, Salt:String):void
            {
                stmt.sqlConnection = this.isDbConnected(conn);
                stmt.text = "INSERT INTO TblUsers (UserId, UserName, ContactName ,Password, Salt) VALUES('"+SignIn1Result2.lastResult.UserId+"','"+SignIn1Result2.lastResult.UserName+"','"+SignIn1Result2.lastResult.ContactName+"','"+SignIn1Result2.lastResult.Password+"','"+SignIn1Result2.lastResult.Salt+"');";  
                Alert.show("Contact Has been Saved");
                stmt.execute();
            }

我已经绑定了以下

[Bindable]
        public var conn:SQLConnection = new SQLConnection();


        [Bindable]
        private var stmt:SQLStatement = new SQLStatement();

        // ArrayCollection used as a data provider for the datagrid. It has to be bindable so that data in datagrid changes automatically when we change the ArrayCollection

        [Bindable]
        private var contactList:ArrayCollection = new ArrayCollection(); 

InsertContact() 是我要在 Login() 函数执行成功内调用的函数

【问题讨论】:

    标签: actionscript-3 apache-flex flex4 adobe flex3


    【解决方案1】:

    函数在函数中被调用,就像其他脚本语言一样,但是在这里你必须仔细观察你想要调用它们的事件。
    我明白了,我发现了我正在做的错误。 正如我所说,我想在 WebService 函数成功时调用该函数 这里的函数应该在 webService Call 的 Result Event 上调用。 所以我刚刚将结果事件添加到我的 Flex 应用程序的 WebService 块中,并根据它更改了 Webservice 定义

    <mx:WebService 
                id="ws" 
                wsdl="http://localhost:2690/vtrServices.asmx?wsdl"> 
    
            </mx:WebService>
            <vtrservices:VtrServices id="vtrServices"
                                     fault="Alert.show(event.fault.faultString + '\n' + event.fault.faultDetail)"
                                     showBusyCursor="true"
                                     result="vtrServices_resultHandler(event)"/>
            <s:CallResponder id="SignIn1Result2"/>
    

    然后我在 Result Event 中使用了 Data Provider 及其 'LastResult' 属性 我想要执行的功能是

    private function insertContact(UserId:String, UserName:String,ContactName:String, Password:String):void
            {
                stmt.sqlConnection = this.isDbConnected(conn);
                stmt.text = "INSERT INTO TblUsers (UserId, UserName, ContactName ,Password) VALUES('"+UserId+"','"+UserName+"','"+ContactName+"','"+Password+"');"; 
                Alert.show("Contact Has been Saved");
                stmt.execute();
            }  
    
    
    
    protected function vtrServices_resultHandler(event:ResultEvent):void
                {
                    // TODO Auto-generated method stub
                    Alert.show(SignIn1Result2.lastResult[0].UserName);
                    insertContact(SignIn1Result2.lastResult[0].UserId,SignIn1Result2.lastResult[0].UserName,SignIn1Result2.lastResult[0].ContactName,SignIn1Result2.lastResult[0].Password);
                    lblWelcome.text = "Welcome"
                    lblName.text = SignIn1Result2.lastResult[0].ContactName;
                }
    

    这里 [0] 是我的行索引号

    谢谢

    【讨论】:

    • 该函数的调用就像 Javascript 我在这里犯了一些错误。我接受它......因为我是 ActionScript 3.0 和 Flex 的菜鸟
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 2014-02-08
    • 2018-02-26
    • 1970-01-01
    • 1970-01-01
    • 2019-08-04
    相关资源
    最近更新 更多