Ошибка при вызове функции из main в flex - PullRequest
0 голосов
/ 12 октября 2011

Привет, ребята, я пытаюсь вызвать функцию, которая определена в main.mxml

   public function btnAcceptCall_clickHandler(event:MouseEvent)
    {
     .....
     }

теперь у меня есть компонент mxml, который вызывает эту функцию

в этом mxml я определил функцию

private function addNewCaller(event:MouseEvent):void
        {
           mx.managers.PopUpManager.removePopUp(this);
           Main.btnCallAndProfile_clickHandler(event)
        }

Проблема в том, что выдает ошибку

вызов возможно неопределенного метода btnCallAndProfile_clickHandler через ссылку со статическим типом Class.

любой может указать, в чем проблема .??

Привет

Ответы [ 3 ]

5 голосов
/ 12 октября 2011

Вы кодируете это неправильно. Во-первых, Main.btnCallAndProfile_clickHandler не является статичным, как указано в ошибке, и вы не хотите, чтобы оно было статичным. Вы захотите получить экземпляр Main для его работы, но для вас это будет означать, что вы нарушите хорошую практику.

Flex - это язык, основанный на событиях, и, следовательно, для разделения задач вы можете использовать события, чтобы выполнить работу за вас. В этом случае в Main вы бы добавили прослушиватель событий (как, скажем, в обработчике события creationComplete):

private function onCreationComplete():void
{
   addEventListener('callAndProfile', btnCallAndProfile_clickHandler);
}

А затем из вашей функции addNewCaller вы должны сделать:

private function addNewCaller(event:MouseEvent):void
{
  dispatchEvent(new Event('callAndProfile', true));
}
5 голосов
/ 12 октября 2011

J_A_X ответ довольно хороший, но есть еще один способ, который все еще можно считать чистым кодом.

Определите интерфейс:

interface AcceptCallHandler
{
    function acceptCall(e:MouseEvent):void;
}

Затем вы можете реализовать этот интерфейс в своем main.mxml и вставьте AcceptCallHandler -экземпляр в ваш компонент:

<s:Application implements="com.package.handlers.AcceptCallHandler" ...>
    <fx:Script>
        <![CDATA[
            public function acceptCall(e:MouseEvent):void
            {
                //...
            }
        ]]>
    </fx:Script>

    <component:SomeComponent acceptCallHandlerImpl="{this}"/>
</s:Application>

Все, что вам нужно сделать в SomeComponent :

class SomeComponent
{
    private var _acceptCallHandler:AcceptCallHandler;
    public function set acceptCallHandlerImpl(value:AcceptCallHandler):void
    {
        _acceptCallHandler = value;
    }

    private function addNewCaller(event:MouseEvent):void
    {
        mx.managers.PopUpManager.removePopUp(this);
        _acceptCallHandler.acceptCall(event);
    }
}

Использование механизма событий (и шаблона разработки Observer) - не единственный инструмент, способствующий слабой связи.В приведенном выше примере я демонстрирую еще 2 мощных метода - программирование для интерфейсов и внедрение зависимостей .

0 голосов
/ 12 октября 2011

Если main.mxml - ваше приложение по умолчанию.Вы можете сделать это:

Application.application.btnCallAndProfile_clickHandler (событие);

...