Как мне вызвать пользовательский компонент с добавленной функциональностью в flex - PullRequest
0 голосов
/ 08 апреля 2011

Я создал пользовательский компонент (с именем customtitlewindow), код которого выглядит следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<mx:TitleWindow xmlns:fx="http://ns.adobe.com/mxml/2009" 
                xmlns:s="library://ns.adobe.com/flex/spark" 
                xmlns:mx="library://ns.adobe.com/flex/mx" layout="vertical" width="400" height="300"
                xmlns:comp="components.*"
                showCloseButton="true"
                keyDown="detectescapekeypress(event)"
                creationComplete="this.setFocus();"
                close="PopUpManager.removePopUp(this);"
                paddingTop="40">
    <fx:Script>
        <![CDATA[
            import mx.managers.PopUpManager;
            public function detectescapekeypress(event:KeyboardEvent):void
            {
                if(event.charCode == Keyboard.ESCAPE)
                {
                    PopUpManager.removePopUp(this);
                }
            }
        ]]>
    </fx:Script>
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>

</mx:TitleWindow>

Теперь я снова создал компонент (с именем deleteconfirm), который вызывает вышеупомянутый, например:

<?xml version="1.0" encoding="utf-8"?>
<mx:Container 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" xmlns:components="components.*">
    <fx:Script>
        <![CDATA[
            import mx.controls.Alert;
        ]]>
    </fx:Script>
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>

    <components:customtitlewindow title="custom title window">
        <s:Label>
            <s:text>this is the custom text for deleteconfirm.</s:text>
        </s:Label>
        <s:Button label="ok">
            <s:click>
                <![CDATA[
                    Alert.show("Hello world!", "title");
                ]]>
            </s:click>
        </s:Button>
    </components:customtitlewindow>
</mx:Container>

(в основном файле) Теперь одним нажатием кнопки я вызываю вышеуказанное (второе) следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
  <mx:Script>
     <![CDATA[
           import mx.managers.PopUpManager;
       ]]>
  </mx:Script>
  <mx:VBox width="100%" height="100%">
     <mx:Button label="Delete Record">
         <mx:click>
             <![CDATA[
                var ctd:deleteconfirm = new deleteconfirm();
                ctd = deleteconfirm(PopUpManager.createPopUp(this, deleteconfirm, true));
             ]]>
         </mx:click>
     </mx:Button>
  </mx:VBox>
</mx:WindowedApplication>

Основная моя цель заключается в том, чтобы все всплывающие окна, показанные для конечного пользователя, закрывались при нажатии клавиши выхода и закрывались все при нажатии кнопки закрытия, отображаемой на заголовке.

Но при нажатии клавиши «escape» ничего не происходит.
Как я могу это сделать?
Что случилось? Пожалуйста, поправьте меня там, где я когда-либо ошибаюсь.

Спасибо

Ответы [ 2 ]

2 голосов
/ 08 апреля 2011

Попробуйте сделать это для своего класса deleteconfirm:

<components:customtitlewindow 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" xmlns:components="components.*" title="custom title window">
    <fx:Script>
        <![CDATA[
            import mx.controls.Alert;
        ]]>
    </fx:Script>
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>

        <s:Label>
            <s:text>this is the custom text for deleteconfirm.</s:text>
        </s:Label>
        <s:Button label="ok">
            <s:click>
                <![CDATA[
                    Alert.show("Hello world!", "title");
                ]]>
            </s:click>
        </s:Button>
</components:customtitlewindow>

Кроме того, вам следует придерживаться надлежащих стандартов, таких как верхний регистр классов (вместо deleteconfirm это должно быть DeleteConfirm; и не мешало бы быть более информативным).

1 голос
/ 08 апреля 2011

Вы пытаетесь удалить неправильную ссылку всплывающего окна.

Создаемое всплывающее окно является экземпляром класса deleteconfirm , но когда вы пытаетесь удалить его, в функции detectescapekeypress () вы передаете экземпляр из customtitlelewindow class.

простой способ исправить это, изменив эту строку в detectescapekeypress () :

PopUpManager.removePopUp(IFlexDisplayObject(this.parent));

Лучший способ исправить это - переместить обработку нажатия клавиши в класс deleteconfirm .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...