Вызов методов объекта подгружаемого по ajax
Не получается найти ответа, наверное из-за незнания как нормально сформулировать вопрос.
задача такая. есть 2 кнопки: comments, add_comments.
нажимаю на первую - по ajax подгружаются комментарии и показываются на экране под фоткой.
нажимаю на add_comments - происходит всё тоже самое, только ещё показывается формачка для ввода комментария и устанавливается на неё фокус.
в чём проблема. ajax - асинхронный, поэтому нельзя сделать такую конструкцию:
comments = ajax_comments(photoid);
comments.toggle();
и
comments = ajax_comments(photoid);
comments.add_comment_form();
надо ведь как-то дождаться, чтобы сначала комментарии по ajax подгрузились, а потом уже вызывать методы toggle и add_comment_form
тогда сделал вот так:
comments = ajax_comments({photo: photoid, onLoad: function() {this.toggle()});
так вроде нормально, но что делать, когда комментарии уже подгрузились? то есть объект с подгруженными комментариями лежит в некотором массиве и при необходимисти я его достаю оттуда по photoid.
тогда делаю такой трюк:
comments = ajax_comments({photo: photoid, command: function() {this.toggle()});
по сути ничего не изменилось, только название метода поменялось - с onLoad на command, то есть теперь этот метод вызывается не только при загрузке но и при каждом обращении в функции ajax_comments (новый ли объект создаётся и подгружается по ajax и после вызывается command, или берётся уже готовый объект).
Но тут опять проблема. А если объект уже создался, но не подгрузился по ajax? или противоположный случай: запоминаю объект, только после того как данные подгрузятся по ajax, но тогда если несколько раз нажать на кнопку, то могут вызываться несколько лишних ajax запросов.
И потом как всё таки быть с такой конструкцией:
comments = ajax_comments();
comments.toggle();
получается, что все команды над ajax объектом должны быть заблокированы до тех пор пока его данные не подгрузятся.
Я так понимаю что такие проблемы уже давным давно решили и придумали какой-нибудь шаблон проектирования для этого. Только вот я никак не могу найти куда копать. Подскажите пожалуйста.
В терминологии может тоже ошибиться. Тут под "ajax-объект"-ом я имею в виду обыкновенных javascript object, данные которого подгружаются через ajax. ну а проблема в том что методы работы с ним должны быть доступны только после того как данные подгрузились
|