Flex - кросс-доменные объекты - PullRequest
0 голосов
/ 14 сентября 2011

У меня есть объект, передаваемый между flash и flex с использованием пользовательского события. Я импортирую библиотеку в flex, содержащую копию класса объекта. Классы идентичны, но когда я пытаюсь получить доступ к объекту в flex, я получаю эту ошибку:

Ошибка типа: ошибка # 1034: сбой приведения типа: невозможно преобразовать com.cackleberries.data.api :: ApiObject $ в com.cackleberries.data.api.ApiObject.

Есть идеи?

Эта функция передается во flash как обратный вызов из AIR / flex

public function airEventHandler(type:String, data:Object):void
{
    switch(type)
    {
            case "air_api_call":
                if(data)
                {
                    if(data.hasOwnProperty("apiObject"))
                    {
                        trace("got air api call event in application");
                        serverApi.makeApiCall(ApiObject(data.apiObject));
                    }
                }
                break;
    }
}

Я получаю сообщение об ошибке, когда передаю ApiObject на serverApi.makeApiCall. Эта функция принимает ApiObject в качестве параметра. Первоначально объект данных создается с помощью клавиши apiObject с ApiObject в качестве значения (выполняется во флэш-памяти).

1 Ответ

0 голосов
/ 14 сентября 2011

Проблема не в serverApi.makeApiCall, а в приведении от data.apiObject к ApiObject.

Причина, по которой вы получаете эту ошибку, заключается в том, что data.apiObject относится к типу ApiObject, включенному во флэш-приложение, в то время как гибкое приложение использует ApiObject как включенное в себя. Несмотря на то, что исходные файлы идентичны, для плеера они, по-видимому, нет. Я думаю, это потому, что компилятор flex не компилируется точно так же, как компилятор flash, но я не уверен на 100%.

В любом случае, для решения этой проблемы вы должны использовать интерфейсы. Пусть ApiObject реализует интерфейс IApiObject со всеми необходимыми методами (т. Е. Методами, которые понадобятся гибкому приложению), определенными в нем, а затем на стороне flex приведите data.apiObject к IApiObject вместо ApiObject.

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