Невозможно отправить пользовательское событие в мобильном приложении flex - PullRequest
0 голосов
/ 10 ноября 2011

Я пытаюсь заставить работать некоторый код из примера, с которым столкнулся.большая часть функциональности работает, но при попытке отправить пользовательское событие происходит сбой.На данный момент код, который пытается отправить событие, находится внутри класса, который обрабатывает удаленное взаимодействие amf.

пример содержит следующую строку для отправки:

Application.application.dispatchEvent(new  
RemoteResultEvent(RemoteResultEvent.USER_UPDATE_COMPLETE,"test"));

, но это не удаетсяпоскольку он не знает, что такое application.application "Несколько маркеров в этой строке: -Доступ приложения с неопределенными свойствами"

Я предполагаю, что это потому, что это не было написано для мобильного приложения.Я попытался изменить диспетчер на EventDispatcher

EventDispatcher(
new RemoteResultEvent(RemoteResultEvent.USER_UPDATE_COMPLETE, "worked"));

, но затем я получил эту ошибку:

TypeError: Ошибка # 1034: сбой приведения типа: невозможно преобразовать события :: RemoteResultEvent @ 18337731 во флэш-память.events.EventDispatcher.

Это код в пользовательском событии RemoteResultEvent.as:

package events
{

import flash.events.Event;
public class RemoteResultEvent extends Event {

    public static var USER_UPDATE_COMPLETE:String = "UserUpdateComplete";
    public var message:String;

    public function RemoteResultEvent(eventType:String, message:String) {
        super(eventType, false, false);
        this.message = message;
    }

}
}

Я ворочаюсь в темноте, поскольку я новичок в сгибании, и этот тип разработки такЯ мог бы делать что-то действительно глупое.Любая помощь будет принята с благодарностью.

Спасибо

JaChNo

1 Ответ

3 голосов
/ 10 ноября 2011

Вы, похоже, не понимаете, как происходит отправка событий.

События могут отправляться в любом классе Flex, который расширяет или имеет EventDispatcher. Большинство компонентов Flex, включая Application, расширяют EventDispatcher. Чтобы отправить событие, вы на правильном пути, просто сделайте:

dispatchEvent(new RemoteResultEvent(RemoteResultEvent.USER_UPDATE_COMPLETE,"test"));

Это отправит событие из вашего текущего класса. Не все компоненты Flex UI, в том числе созданные в MXML, можно считать классом.

То, что вы пытаетесь сделать, это отправить событие в приложение основного уровня; что является ужасным нарушением инкапсуляции, но выполнимо. Вы должны разыграть его как Приложение, чтобы не получить универсальный объект. Как это:

(Application.application as Application).dispatchEvent(new RemoteResultEvent(RemoteResultEvent.USER_UPDATE_COMPLETE,"test")); 

Этот подход устарел начиная с Flex 4; и вместо этого вы используете FlexGlobals.topLevelApplication :

(FlexGlobals.topLevelapplication as Application).dispatchEvent(new RemoteResultEvent(RemoteResultEvent.USER_UPDATE_COMPLETE,"test"))

Вы не говорите, но вы намекаете на то, что находитесь в мобильном проекте. Если это так, я не ожидал бы, что класс приложения mx будет доступен, если вы явно не добавили компоненты SWC с MX в свой класс. Вам нужно будет получить доступ к приложению Spark, у которого нет свойства Application. Возможно, поэтому вы получаете ошибку.

Обязательно импортируйте приложение, которое вы хотите использовать:

import spark.components.Application 

Подробнее о Spark Application класс.

...