【问题标题】:pass data from popup to parent将数据从弹出窗口传递给父级
【发布时间】:2011-01-01 04:09:38
【问题描述】:

我有一个带弹出式孩子的父母。当父加载时,我必须在弹出窗口中调用一个函数而不显示弹出窗口(因此,我加载“pupLove”但不将其包含在布局中)......然后我将此数据传递给父级。当用户手动单击另一个按钮打开弹出窗口时,会调用相同的函数并将数据传递给父级。但是,我无法将 dg.length 传递给父级。我相信根本问题是我正在加载“pupLove”,因此父母感到困惑......我猜如果我摆脱“pupLove”我可以正确传递数据但需要调用孩子的父级的creationComplete函数....我该怎么做?

这是我的父母:

<?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" 
           xmlns:mx="library://ns.adobe.com/flex/mx"
           backgroundColor="green" width="50%" height="100%" 
           xmlns:local="*"         
           >



<fx:Script>
    <![CDATA[

        import pup;
        import mx.managers.PopUpManager;

        public function showPup(evt:MouseEvent):void {
            var ttlWndw:pup = PopUpManager.createPopUp(this, pup, true) as pup;
            PopUpManager.centerPopUp(ttlWndw);
        }



    ]]>
</fx:Script>

<mx:VBox>

<local:pup id="pupLove" visible="false" includeInLayout="false" />
<s:Button click="showPup(event);" label="launch Pup" />
<mx:Text id="Ptest" color="black" text="from Parent:{pupLove.dg.length}" />

</mx:VBox>


</s:Application>

还有一个名为“pup.mxml”的弹出子窗口:

<?xml version="1.0" encoding="utf-8"?>
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" 
     xmlns:s="library://ns.adobe.com/flex/spark" 
     xmlns:mx="library://ns.adobe.com/flex/mx" width="400" height="300">

<fx:Script>
    <![CDATA[

                    public function init():void{
                    // send php call
                    }

        import mx.events.CloseEvent;
        import mx.managers.PopUpManager;
        private function removePup(evt:Event):void {
            PopUpManager.removePopUp(this);
        }

    ]]>
</fx:Script>

<fx:Declarations>
    <s:ArrayCollection id="dg">

    </s:ArrayCollection>
</fx:Declarations>


<s:TitleWindow width="100%" height="100%" close="removePup(event)">
<mx:VBox>
    <mx:Text id="test" color="red" text="from Child:{dg.length}" />
    <s:Button label="add Items" click="dg.addItem({id:'cat'})" />

</mx:VBox>

</s:TitleWindow>

</s:Group>

更新:我想我的问题可以更简单地表述为:“有没有一种方法可以从父级调用子级函数而不实际加载子级?”

【问题讨论】:

    标签: actionscript-3 apache-flex popup


    【解决方案1】:

    好吧,如果在您孩子的函数中,您不需要访问它的任何 UI 组件,那么您可以在父视图中实例化孩子并调用该方法。 当您需要在之后显示弹出窗口时,请对现有实例使用 PopupManager addPopup 方法,而不是使用 createPopup

    【讨论】:

    • “那么您可以在父视图中实例化子视图并调用该方法”....我该怎么做?
    • var popup:pup = new pup(); popup.init();
    • 这行得通,但是由于 pup 的 init() 函数引用了 pup 中的一些可视组件,我收到一个错误,即无法访问空对象引用...。我试过 popup.initialize() 但那没有似乎没用。
    • 是的,我的答案只有在不引用 ui 组件时才有效。让我想想别的事
    • 这是一种 hack,但你可以从你的父级监听 popup creationComplete 事件,将 popup visible 属性设置为 false 并调用 PopupManager.addPopup。当 creationComplete 事件被调度时,移除弹窗,将其 visible 属性设置为 true 并调用 init 方法
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多