PDA

Просмотр полной версии : sendAndLoad и event внутри класса


xzwiex
18.05.2009, 19:44
Собственно задача такая: отправить запрос на сервер, получить результат, и если результат удовлетворяет определенным требованиям(при логине сервер возвращает "ОК"), вернуть true. Как только это происходит, повесить событие onLogin

В классе пишу


import mx.events.EventDispatcher

class Flat {

private var dispatchEvent:Function;
var addEventListener,removeEventListener:Function;
var username:String = "";
var password:String = "";
var url:String = "http://myserver.com";
private var accepter:LoadVars;
var myArray:Array;


function Flat(user:String,pass) {
myArray = new Array();
username = user;
password = pass;
EventDispatcher.initialize(this);

}

function login() {
var req:LoadVars = new LoadVars();
var accepter:LoadVars = new LoadVars();
accepter.onData = eventer;
req.decode("mode=login");
req.decode("user="+username);
req.decode("hpassword="+password);
req.sendAndLoad(url,accepter,"POST");
}
function eventer(myString) {
var res:Boolean = false;
if (myString == "OK") {res = true;}
var eventObject:Object = {target:this, type:"onLogin"};
eventObject.res = res;
dispatchEvent(eventObject);
}

}


В мувике пишу

var myClient:Flat = new Flat("user","pass");

var myListnerObj:Object = new Object;
myListnerObj.onLogin = function() {
trace ('ok');
}
myClient.addEventListener("onLogin",myListnerObj);
myClient.login();

Собственно, заветного "ок" не наблюдается. Где моя ошибка?

silin
18.05.2009, 22:06
метод класса присвоить onData можно только через Delegate
accepter.onData = Delegate.create(this, eventer);
иначе этот eventer() работает "от имени" accepter, у которого нет dispatchEvent

xzwiex
19.05.2009, 07:15
спасибо, сейчас проснусь и попробую =)