![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Jan 2011
Сообщений: 5
|
package { import flash.events.Event; import flash.net.*; public class Question { public var id:uint; public var authorId:uint; private function setQuestionInfo(e:Event){ var questionXML:XML = new XML(e.target.data.result); var question:XMLList = new XMLList(questionXML); this.id = question.question[0].@id; this.authorId = question.question[0].author; } private function getQuestionInfo(id:uint, onSuccess:Function){ var request:URLRequest = new URLRequest(); request.url = "XXXXXXXXX"; request.method = URLRequestMethod.POST; request.data = new URLVariables("do=getQuestion&id=" + id); var loader:URLLoader = new URLLoader(); loader.dataFormat = URLLoaderDataFormat.VARIABLES; if(onSuccess == null) onSuccess = function() {}; loader.addEventListener(Event.COMPLETE, onSuccess); loader.load(request); } public function Question(id:uint) { getQuestionInfo(id, setQuestionInfo); } } } получаю на выходе трейса 0, хотя должна быть единица. если же в функции setQuestionInfo прописать trace(this.id) то все ОК. как я понимаю результат просто не успевает записаться в переменную id. как это исправить? поставить какую-нибудь ожидалку? |
|
|||||
|
Как думаете, почему URLLoaderDataFormat сразу не возвращает результат, а отсылает событие onSuccess? Что бы программистам жизнь медом не казалась?
![]() Да, не успевает, да, нужна "ожидалка" Точнее надо сделать либо событие, которое посылает Question по завершению запроса. Либо callback(указатель на функцию).
__________________
Искренне Ваш, Джек. |
|
|||||
|
Регистрация: Jan 2011
Сообщений: 5
|
добавил функцию обработчик. получилось так
package { import UserInfo; import flash.events.Event; import flash.net.*; public class Question { public var id:uint; public var authorId:uint; public var successLoadingFunction:Function; private function setQuestionInfo(e:Event){ var questionXML:XML = new XML(e.target.data.result); var question:XMLList = new XMLList(questionXML); this.id = question.question[0].@id; this.authorId = question.question[0].author; successLoadingFunction(e); } private function getQuestionInfo(id:uint, onSuccess:Function){ var request:URLRequest = new URLRequest(); request.url = "ххххххххххх"; request.method = URLRequestMethod.POST; request.data = new URLVariables("do=getQuestion&id=" + id); var loader:URLLoader = new URLLoader(); loader.dataFormat = URLLoaderDataFormat.VARIABLES; if(onSuccess == null) onSuccess = function() {}; loader.addEventListener(Event.COMPLETE, onSuccess); loader.load(request); } public function Question(id:uint, onSuccess:Function) { this.successLoadingFunction = onSuccess; getQuestionInfo(id, setQuestionInfo); } } } |
|
|||||
|
Лучше событием, но так с пивом потянет.
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
|
Цитата:
package { import UserInfo; import flash.events.Event; import flash.net.*; public class Question { public var id:uint; public var authorId:uint; public var callBack:Function; private function setQuestionInfo(e:Event){ var questionXML:XML = new XML(e.target.data.result); var question:XMLList = new XMLList(questionXML); this.id = question.question[0].@id; this.authorId = question.question[0].author; successLoadingFunction(e); } private function getQuestionInfo(id:uint, onSuccess:Function){ var request:URLRequest = new URLRequest(); request.url = "ххххххххххх"; request.method = URLRequestMethod.POST; request.data = new URLVariables("do=getQuestion&id=" + id); var loader:URLLoader = new URLLoader(); loader.dataFormat = URLLoaderDataFormat.VARIABLES; loader.addEventListener(Event.COMPLETE, onSuccess); loader.load(request); } public function Question(id:uint, callBack:Function) { this.callBack = callBack; getQuestionInfo(id, setQuestionInfo); } private function onSuccess(event:Event) { if (callBack != null) callBack.call(); } } } |
|
|||||
|
Дело вкуса... По мне так, в подобных местах, как раз удобнее функциями пользоваться... Да и кода поменьше... Мы ведь в твинах события не используем почему то?
__________________
Искренне Ваш, Джек. |
|
|||||
|
Регистрация: Jan 2011
Сообщений: 5
|
всем спасибо за ответы
|
![]() |
![]() |
Часовой пояс GMT +4, время: 16:07. |
|
|
« Предыдущая тема | Следующая тема » |
|
|