在父级中从子动画片段中获取变量?Flash AS3

5 variables flash actionscript-3

我在子MC中定义了一些变量:

var first_nme = data.return_first;
    var second_nme = data.return_second;
    var email_addr = data.return_email;
    var user_domain = data.return_domain;
    var user_name = data.return_username;
Run Code Online (Sandbox Code Playgroud)

我正在尝试在父动画片段/另一个动画片段中使用这些变量.

我试过跟踪方法:

    trace(MovieClip(verif).first_nme);

//'verif' is the mc name

    trace(MovieClip(parent).first_nme);
Run Code Online (Sandbox Code Playgroud)

以上两者都为var first_nme返回了一个未定义的错误.

谁能告诉我如何正确地做到这一点?

谢谢

编辑:

儿童:

function completeHandler(event:Event):void{

    // Load the response from the PHP file
    var data:URLVariables = new URLVariables(event.target.data);
    var returnn_stat = data.return_status;
    var ffferror256 = data.return_value;
    returnn_stat = returnn_stat.replace(/\s/m, "");


    if (returnn_stat == "FAILED"){
    status_txt.text = ffferror256;

    }
    else if (returnn_stat == "PASSED"){

    var first_nme = data.return_first;
    var second_nme = data.return_second;
    var email_addr = data.return_email;
    var user_domain = data.return_domain;
    var user_name = data.return_username;

    MovieClip(parent).gotoAndPlay("confirm");

    first_txt.text = first_nme;
    second_txt.text = second_nme;
    email_txt.text =  email_addr;
    username_txt.text = user_name;
    domain_txt.text = user_domain;


    }
    else {
        status_txt.text = "Oops, something went wrong. Please try again later.";

    }

}
Run Code Online (Sandbox Code Playgroud)

家长:

trace(MovieClip(verif).getChildAt(0).first_nme);
txtt_txt.text = first_nme;
Run Code Online (Sandbox Code Playgroud)

我已尝试使用行中的帧编号,trace(MovieClip(verif).getChildAt(0).first_nme);但仍然是相同的错误.

pky*_*eck 2

看来您提前调用了,trace因为您在子 mc 中异步加载了某些内容。这里正确的做法是加载子 mc 中的内容,当加载过程完成 ( onCompleteHandler) 时,您将触发由父 mc 处理的事件。您还可以将加载的数据添加到(自定义)事件并使用事件对象将其传递给父级:

function completeHandler(event:Event):void 
{
    // Load the response from the PHP file
    var data:URLVariables = new URLVariables(event.target.data);
    var returnn_stat = data.return_status;
    var ffferror256 = data.return_value;
    returnn_stat = returnn_stat.replace(/\s/m, "");


    if (returnn_stat == "FAILED")
    {
        status_txt.text = ffferror256;
    }
    else if (returnn_stat == "PASSED")
    {
        var evt:MyCustomEvent = new MyCustomEvent(MyCustomEvent.DATA_LOADED, true, true);
        evt.first_name = first_nme;
        evt.second_name = second_nme;
        evt.email =  email_addr;
        evt.username = user_name;
        evt.domain = user_domain;

        dispatchEvent(evt);
    }
    else
    {
        status_txt.text = "Oops, something went wrong. Please try again later.";
    }
}
Run Code Online (Sandbox Code Playgroud)

然后你的父MC中有一个事件监听器:

this.addEventListener(MyCustomEvent.DATA_LOADED, onDataComplete);
// ...
private function onDataComplete(evt:MyCustomEvent):void
{
    gotoAndPlay("confirm");

    first_txt.text = evt.first_name;
    second_txt.text = evt.second_name;
    email_txt.text =  evt.email;
    username_txt.text = evt.username;
    domain_txt.text = evt.domain;
}
Run Code Online (Sandbox Code Playgroud)

最后但并非最不重要的一点是自定义事件类:

package 
{
    import flash.events.Event;

    public class MyCustomEvent extends Event
    {
        public static const DATA_LOADED:String = "onDataLoaded";

        public var first_name:String;
        public var second_name:String;
        public var email:String;
        public var username:String;
        public var domain:String;

        public function MyCustomEvent($type:String, $bubbles:Boolean = false, $cancelable:Boolean = false)
        {
            super($type, $bubbles, $cancelable);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)