Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Отлов событий от RelayResponder в AS2 (http://www.flasher.ru/forum/showthread.php?t=99646)

Stop Black PR! 10.08.2007 05:00

Отлов событий от RelayResponder в AS2
 
Имеется вот такой код, вызывающий функцию методом Flash Remoting
По нажатию на кнопку инициализируется сервис, в качестве объекта, отлавливающий события используется текущий (точнее родитель для кнопки), а функции удачного и неудачного вызова расположены непосредственно в текущем объекте.

Во временной шкале это всё работает. Если переместить в класс, то есть в AS2, то работать напрочь отказывается. Точнее, сервис стартует, возвращает нужное число и это видно с помощью дебагера, а сами функции не вызываются. Все варианты расположения этих функций уже перепробовал и с различными объектами вместо "this._parent" проверял.
Самый тупой способ: назначить объектом _root и поместить туда эти функции не работает. Функции не вызываются. Аналогичную проблему описали здесь http://www.flash-db.com/Board/index.php?topic=11206.0 и ответ найти не удалось.

Возможно кто то наблюдал подобное в другом контексте, когда не находился объект "отлавливающий" события. Поделитесь опытом, как это решать.

Код:

function getNewId(msg: ResultEvent){
        mx.remoting.debug.NetDebug.trace({level:"Debug", message:"onEchoData" });
        playerId = Number(msg.result);
        show.text = msg.result
       
}
function onEchoFault(rs: FaultEvent ){
        mx.remoting.debug.NetDebug.trace({level:"None", message:"There was a problem: " + fault.fault.faultstring });
}

newPlayer.onPress = function(){
  var pc:PendingCall = myService.newPlayerAMF();
  pc.responder = new RelayResponder(this._parent, "getNewId", "onEchoFault" );
}


etc 10.08.2007 10:16

А импорт-то нужных классов прописан?

Stop Black PR! 10.08.2007 13:34

Да, импорт прописан, я просто не стал весь код приводить.

Полный код работал в кадре, проблемы начались после переноса в класс.

etc 10.08.2007 13:37

Хм, я ооочень давно работал с AMF, но проблем не возникло.
Вот декомпил (исходников с собой нет) одной из моих флешек:

Код:

class ru.etcs.nokia.guestbook.Receiver
    {
        var addEventListener, service, pc, dispatchEvent;
        function Receiver (callback, message) {
            mx.events.EventDispatcher.initialize(this);
            addEventListener("onLoadSuccess", callback);
            addEventListener("onLoadFailed", callback);
            service = new mx.remoting.Service("/flashservice/gateway.php", null, "DataLoader", null, null);
            var _local2 = Function(service.loadMessage);
            pc = _local2.call(service, ((message != undefined) ? (message) : null));
            pc.__set__responder(new mx.rpc.RelayResponder(this, "onSuccess", "onFailure"));
        }
        function onSuccess(result_event) {
            var _local5 = result_event.__get__result();
            var _local3 = _local5.points;
            var _local2 = 0;
            while (_local2 < _local3.length) {
                var _local4 = _local3[_local2];
                _local3[_local2] = ru.etcs.nokia.core.Hex.binToArray(_local4, 3);
                _local2++;
            }
            dispatchEvent({type:"onLoadSuccess", result:_local5});
        }
        function onFailure(failure_event) {
            trace ("Fault");
            dispatchEvent({type:"onLoadFailed"});
        }
    }

onSuccess работает, onFailure нет, но это фигня :D

Stop Black PR! 10.08.2007 13:39

вот на всякий случай:
Код:

import mx.remoting.Service;
import mx.services.Log;
import mx.rpc.RelayResponder;
import mx.rpc.FaultEvent;
import mx.rpc.ResultEvent;
import mx.remoting.PendingCall;

может быть так, что для АС2 нужны другие класса?

ага, попробую

а onFailure в принципе не заработал? или он не нужен был?

etc 10.08.2007 13:43

Я не знаю, либо это старая версия Remoting, либо AMFPHP. onFailure не работал изначально, решать проблему было лень, да и было это полтора года назад.

Stop Black PR! 10.08.2007 13:49

понял, учту

этот исходник тоже древний изначально был, 2004 года, хотя очевидной разницы нет


Часовой пояс GMT +4, время: 13:34.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.