Вход

Просмотр полной версии : Прелоадер не дожидаясь Event.COMPLETE


ntro123123
06.09.2014, 22:55
Добрый вечер. Возможно ли обойтись без "Event.COMPLETE" и не получить undefined ?



protected function GetData(datafile:String):Object
{
var qweqwe:String;
var param:Object={
X:150,
Y:150,
R:30,
C:"999999"
};
var txtload:URLLoader = new URLLoader();
txtload.addEventListener(Event.COMPLETE, function(e:Event){
txtload.data;
});
txtload.load(new URLRequest(datafile));
//тут остановиться и ждать пока загрузиться файл, затем провести вычисления и вернуть Object


trace(txtload.data); //возвращает "undefined" - это понятно, но нужно чтобы он дождался, но без функции/события.
return Object;
}

in4core
07.09.2014, 02:39
Нет нереально. Не придумывайте ерунду. Чем функция помешала? и ВООБЩЕ какого х...на анаонимки , когда пишите в классах?

ntro123123
07.09.2014, 11:19
спасибо. Ананимка была для простоты

illuzor
07.09.2014, 12:52
Можете объяснить, зачем вам это?
Есть URLStream, который даёт доступ к данным даже во время загрузки. Но, конечно же, только к той части данных, которая загружена на момент обращения.

ntro123123
07.09.2014, 15:35
При нажатии на CRETE (кнопка на сцене), нажатие которой отслеживает класс контроллер, он вызывает в моделе функцию GetData которая должна получить данные из txt файла и передать их в вьювер. Сделать обработку эти данных в самой функции виювера, и по окончанию загрузки файла вызывать метод класса вьювер, но модель нам на что тогда? Только чтобы загрузить данные? а обработкой будет заниматься вьювер (которому это не свойственно)?

illuzor
07.09.2014, 15:57
ntro123123, организуйте код так, чтобы данные начинали обрабатываться только после их загрузки.
Иначе невозможно работать с тем, что не существует.

Gerbert
07.09.2014, 20:04
Если загружаемые данные не участвуют в формировании ЛОГИКИ приложения, то грузить их может view.
Ведь если данные из файла предназначены исключительно для отображения, то их можно сравнить с картинкой.

Добавлено через 2 минуты
Если же эти данные играют не последнию роль в формировании логики приложения, то
грузить их должна model и в обработчике событий окончания загрузки ( completeHandler ) lbcgfnxbnm событие view.
А передать загруженные данные можно несколькими способами -
1) Вместе событием.
2) После того, как view поймает событие от модели, она сама заберет эти данные из модели.

ntro123123
07.09.2014, 20:36
Мысль понял, попробую все реализовать, спасибо!

in4core
07.09.2014, 22:56
Если же эти данные играют не последнию роль в формировании логики приложения, то
грузить их должна mode А че не контроллер ? :) Я за контроллер )

Gerbert
08.09.2014, 23:04
in4core а можно подробнее? Я несколько раз слышал о таком подходе,
но до конца его не разбирал. У Вас вид диспатчит событие контроллеру, что нужно картинку, тот её грузит и отдает вид.отдатьВиду(картинка) ?

GBee
09.09.2014, 01:18
У Вас вид диспатчит событие контроллеру, что нужно картинку, тот её грузит и отдает вид.отдатьВиду(картинка) ?
Вроде контроллер меняет модель и говорит виду обновиться. А вид теребит модель? Я не поклонник мвц, но мне кажется это логичным.

in4core
09.09.2014, 11:51
Хм. Немного не так, оыбчно контролл грузит ассеты, тоесть пачку картинок СРАЗУ при инициализации, и далее уже записывает в модель, а вид снимает из модели при добавлении на сцену, ну или когда надо.
Если же разговор идет про единоразовую загрузку постоянно, в этом случае грузить должен вид , не должна модель заниматься загрузкой тут или контролл. Модель должна быть чистой, тонкой, - логика и данные, логика в стиле if ( a > b ) c * d = j * l; - математическая, физическая и т.п. , и чистые данные. Вот тогда модель оправдывает себя, как модель, контроллер работает с глобальными событиями, дергает модель, записывает в нее данные и т.п. , а вид же - занимается показом, загрузка картинки - это тоже показ, просто сама загрузка - это мелочевка, которую выносить не стоит.

ntro123123
11.09.2014, 14:49
контроллер работает с глобальными событиями, дергает модель, записывает в нее данные и т.п.

а контроллер будет дергать вид для отображения?

Вот как в моем случае: на сцене кнопка CREATE когда на нее нажимают, контроллер отслеживает это событие и вызывает метод во вьювере для чтения параметров объекта (радиус, цвет и т.п.) и вьювер отображает объект на сцене? и при этом контроллер не участвует вообще никак? У меня вот так:
контроллер отслеживает клик на CREATE и просит модель загрузить данные (радиус, цвет и т.п.) и эти данные отдает вьюверу. Так можно? Или это считается ошибкой?

Gerbert
11.09.2014, 20:18
Тут Вам туго придется :) Есть два лагеря, один считает, что вид должен иметь ссылку на модель, а контроллер нужен только для того, чтобы поймав событие вида тыркал модель. А второй лагерь считает, что вид не имеет ссылки на модель,
а контроллер служит связующим звеном между видом и моделью. Он ловит события от вида и передает в модель, получает возвращенные данные от модели и передает их в вид. И еot при этом указывает виду, что и когда ему нужно отображать.

Так что, сложно что-то Вам посоветовать. Ждем in4core, его всегда интересно слушать.

in4core
12.09.2014, 00:18
Я не буду ничего советовать, тут каждый сам. Я к тому лагерю, что вид имеет ссылку на модель, это вопервых. И к своему личному лагерю смеси MVC и MVP. Так как у меня при определнных ситуациях вид подписывается на модель, а при других контроллер дергает вид.
Я уже приводил простой пример работы с сервером. Контроллер запускает методы сервера, получает данные. И тут 2 пути. Данные, которые потребуются для дальнейшей обработки, показа и т.п. на долгосрочной основе - я их пишу в модель и уже моделью обновляю виды. А те данные которые нужны на 1 раз, сразу пишу в вид, через контрол. 2й случай - это наример я получил ссылку с сервера на картинку и хочу ее единоразово загрузить ( например фон приложения ) , делаю в контролдлре так view.setImage(e.data); все. Я загрузил ее и забыл, в модели она не нужна.
Низкий поклон

ntro123123
13.09.2014, 19:47
http://www.flasher.ru/forum/showthread.php?p=1171916#post1171916