无法使用Flash Builder中的事件从子弹出窗口中检索main中的属性

时间:2013-12-17 11:25:49

标签: flex popup flash-builder

我正在使用组件来显示弹出窗口并使用事件侦听器来获取弹出窗口属性并删除父窗口中的弹出窗口。但是,监听器弹出窗口中的poup var为nul,因此会抛出错误。

任何建议都将不胜感激。

约翰


这是我的EditStudentLogInForm.mxml组件..

<?xml version="1.0"?>
<!-- containers\layouts\myComponents\MyLoginForm.mxml -->
<mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml"
            creationComplete="handleCreationComplete();">
    <mx:Script>
        <![CDATA[
            import mx.managers.PopUpManager;
            [Bindable] public var studentLoginEmail:String;
        ]]>
    </mx:Script>

    <mx:Form width="333">
        <mx:FormItem label="Email">
            <mx:TextInput id="username" width="207"/>
        </mx:FormItem> 
        <mx:FormItem label="Password">
            <mx:TextInput id="password" 
                      width="205"/>
        </mx:FormItem> 
    </mx:Form>
    <mx:HBox> 
        <mx:Button id="okButton" label="OK"/> 
        <mx:Button id="cancelButton" label="Cancel" />
    </mx:HBox> 
 </mx:TitleWindow>

这是父母......

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
            xmlns:s="library://ns.adobe.com/flex/spark">    
    <mx:Script>
        <![CDATA[
            import flash.events.Event;
            import mx.managers.PopUpManager;
            import mx.core.IFlexDisplayObject;
            import EditStudentLogInForm;
            import mx.containers.TitleWindow;

            public var helpWindow:EditStudentLogInForm;

            public function showLogin():void {
                    // Create the TitleWindow container.
                var helpWindow:EditStudentLogInForm = EditStudentLogInForm(
                    PopUpManager.createPopUp(this, EditStudentLogInForm, true));

                helpWindow.username.text = "johnbdh@myserver.com";
                helpWindow["cancelButton"].addEventListener("click", removeMe);   
                helpWindow["okButton"].addEventListener("click", submitData); 
            }

            // OK button click event listener.
            private function submitData(event:Event):void {
                testText.text = helpWindow.username.text;
                                //*********helpWindow is nul*******
                removeMe(event);
            }

            // Cancel button click event listener.
            private function removeMe(event:Event):void {
                PopUpManager.removePopUp(helpWindow);
            }                           
        ]]>
    </mx:Script>    
</mx:Application>

1 个答案:

答案 0 :(得分:1)

当你这样做时

public function showLogin():void {
    var helpWindow:EditStudentLogInForm = ...
}

您在helpWindow方法的范围内声明并实例化了一个新变量showLogin。这意味着您无法在showLogin方法之外访问分配给此本地范围变量的实例。

你确实在类范围内声明了另一个变量helpWindow(在这种情况下你的类是主应用程序),但是你永远不会为它分配任何实例(因为你'将此弹出式实例重新分配给仅存在于helpWindow的{​​{1}}变量。

因此,当您尝试在另一种方法中访问此变量时,其值为showLogin 解决方案很简单:只需将弹出窗口实例分配给类范围的变量:

null

旁注:如果在类和方法内部有一个同名的变量,那么最本地范围的变量总是优先:

public function showLogin():void {
    helpWindow = EditStudentLogInForm(
        PopUpManager.createPopUp(this, EditStudentLogInForm, true)
    );
    ...
}