Flex:每次单击弹出窗口时如何调用函数

时间:2013-06-05 14:48:36

标签: flex actionscript flash-builder

每次点击弹出窗口(包含textarea框)的链接时,我都会尝试自动关注textarea框。我尝试使用creationComplete这样做,但只能使用一次。它不适用于初始化。

<s:SkinnablePopUpContainer xmlns:fx="http://ns.adobe.com/mxml/2009" backgroundAlpha="0" contentBackgroundAlpha="0"
                       width="100%" height="100%"
                       xmlns:s="library://ns.adobe.com/flex/spark" xmlns:scripts="scripts.*"
                       creationComplete="notesTextArea.setFocus();">

2 个答案:

答案 0 :(得分:0)

我解决这个问题的唯一方法是在显示弹出窗口后设置焦点。例如:

var aboutWindow:About = new About();
PopUpManager.addPopUp(aboutWindow,this);
PopUpManager.centerPopUp(aboutWindow);
aboutWindow.myTextArea.setFocus();

它适用于我。

答案 1 :(得分:0)

虽然来自@gustyaquino的答案是一个很好的建议,但我相信有一个更清晰的解决方案更适合你正在使用的SkinnablePopUpContainer课程。

SkinnablePopUpContainer有一个open()方法,通常用于显示弹出窗口。根据文档,open()方法打开弹出窗口(使用PopUpManager,就像在@ gustyaquino的代码中一样),但它也会播放过渡效果,最后它会调度FlexEvent.OPEN事件

此外,SkinnablePopUpContainer创建一次并重新使用。这就是您的“creationComplete”和“initialize”事件解决方案仅在第一次(实际创建对象时)工作的原因。请注意,在@ gustyaquino的解决方案中,每次都会弹出一个新的弹出窗口。这就是我们在SkinnablePopUpContainer课程存在之前推出的方式。

在下面的示例中,我使用“open”事件来检测弹出窗口何时打开并在那里设置焦点。我相信这是一种更简洁的方法(重新使用弹出窗口并将代码放在弹出类的TextInput内)。

应用程序MXML:

<?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"
               xmlns:local="*"
               width="100%" height="100%">

    <fx:Declarations>
        <local:MyPopUp id="poppy" />
    </fx:Declarations>

    <s:Button label="Open pop up" click="poppy.open(this)" />

</s:Application>

PopUp MXML:

<?xml version="1.0" encoding="utf-8"?>
<s:SkinnablePopUpContainer 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="300" height="300"
                           backgroundColor="#c0c0c0"
                           open="onPopUpOpened()">

    <fx:Script>
        <![CDATA[
            import mx.managers.PopUpManager;

            override public function updatePopUpPosition():void
            {
                PopUpManager.centerPopUp(this);
                // this doesn't work here
                //myInput.setFocus();
            }

            private function onPopUpOpened():void
            {
                myInput.setFocus();
            }

        ]]>
    </fx:Script>

    <s:layout>
        <s:VerticalLayout paddingLeft="10" paddingRight="10" paddingTop="10"/>
    </s:layout>

    <s:TextInput id="myInput" width="100%"  />
    <s:Button label="Close" click="close()"/>
</s:SkinnablePopUpContainer>
相关问题