Отрисовка данных получаемых разными способами (ajax + static)
Добрый день. Не знаю как правильнее сформулировать вопрос в одном заголовке, попытаюсь написать подробнее в чем непонимание.
У меня есть некий объект Stat (буду там именовать для удобства), умеющий рисовать данные. Метод отрисовки может быть примерно таков - Stat.prototype.write = function () { this.$point.append(this.data); }; Метод отрисовки вызывается из другого объекта. Данные тоже передаются из внешней функции через метод Stat.prototype.setData = function (data) { this.data = data } В случае если например var data = new Date(); var stat = new Stat; stat.setData(data); stat.write(); У меня все хорошо, быть иначе и не могло бы, и все что нужно отрисовано, а вот когда мне нужно data получить по Ajax, я совершенно перестаю понимать что именно мне нужно передать в метод setData при инициализации объекта. Смысл в том что мне нужно чтоб метод write дергал this.data, где бы жила ajax фукнция и после получения данных происходила дальше отрисовка. Думается что есть какие то паттерны для этих задач, но что то не знаю куда копнуть. Спасибо. p.s. Насколько я понимаю мне б что то как то реализовать в виде promise , чтоб мой метод write вызывал getData, и после получения шел рисовать дальше. Но я не понимаю чего-то, что не дает мне понять картину происходящего . Я лишь вижу возможность инициировать аяксом дальнейшую отрисовку, а мне нужно в точности наоборот, инициировать аякс, дождаться его выполнения и уж потом продолжить дальше. Как сделать, не знаю. |
Цитата:
Ваш паттерн я вообще не понял. |
Обычно делается так
var stat = new Stat; ожидание команды поступила команда получение данных соотв команде получили данные stat.setData(new Date()).write(); ожидание команды команда, нужны данные соотв команде, получили данные stat.setData(new Date()).write(); ожидание команды... Ну или так stat.write(data); или не так? |
Цитата:
Попытаюсь еще раз попытаться рассказать. Сущствует конструктор Source, в котором я описываю данные, нужные мне для отрисовки. Те данные, что я хочу отрисовать я закидываю через setData , отрисовывает другой объект, через метод write. Сложность в том чтоб вызывать метод write из другого объекта, в том случае когда один из объектов реализующих Stat имеет не статические данные, а получаемые через Ajax. Сложность так же в том, что Ajax работает через callback функции , т.е. условно говоря могу вызвать нужный мне метод отрисовки только после получения данных, но свойство с данными может быть как ajax получаемые, так и статически объявленными. |
Цитата:
Один товарищ тут подсказал про jQuery Deffered https://api.jquery.com/category/deferred-object/ смотрю читаю. Думаю это решит вопрос. |
Понимаете в чем тут хитрость. Вы излагаете какими-то академическими терминами, чего там-там конструируется, реализуется, регистрируется и бла-бла-бла, а элементарную event-driven апликуху сделать не можете. Из чего можно сделать вывод, что за всем изложенным какой-то гавнокод по хз каким канонам.
Цитата:
|
Цитата:
Еще может Worker поможет https://developer.mozilla.org/en-US/...ng_web_workers |
Совет про синхронность тем страннее, чем дольше длится запрос моих данных :)))
Что касаемо темы, вопрос решился таким образом. Не pure js, но все же. var data, rawdata = this.data(), that = this; $.when(rawdata).then(function () { if(rawdata.responseText) { data = rawdata.responseText; } else { data = rawdata; } that.write(data); }); Оказалось что $.ajax возвращает ко всему прочему deferred объект, а $.when с этим делом работает. Если же функция которой я забираю данные из объекта возвращает любой другой, не deferred, то $.when "исполняет" сразу же дальнейшие действия. Вот и получается что такое простой проверкой я забираю любые данные и если они асинхронно получаемые - вставляю их по достижению результата. Ну и при отсутствии значения responseText в возвращаемом значении, я только догадываюсь что это не аякс и вывожу само значение. Возможно кто то сможет подсказать, как же именно мне узнать какой тип функции я получаю, что потом адекватно забирать из них данные. p.s. Ну и не забывать передавать объекту в виде функции, возвращаемой нужные мне данные. Т.е. если мне понадобится передать попросту текст (что конечно абсурдно, но просто для примера) я задаю данные через функцию в виде var data = function () {return 'Мои данные'}; myObject.setData(data); |
Когда впервые увидел исходники Yii - есть такой модный фрейморк - подумал какие-такие события вообще могут быть на php, ну таймер можно запустить наверно, а так кому еще там их генерить-то, юзера же нету, а все остальное не научно.
А у вас в js вообще никаких событий нет в той апликухе? Она как запустилась так и молотит пока данные не кончатся? |
Цитата:
|
Часовой пояс GMT +3, время: 13:20. |