PDA

Просмотр полной версии : Отлов событий от RelayResponder в AS2


Stop Black PR!
10.08.2007, 05:00
Имеется вот такой код, вызывающий функцию методом 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 года, хотя очевидной разницы нет