backboneJS, дождаться выполнения всех AJAX запросов.
В общем в представлении используется 2е разные коллекции. В инициализации представления пишу так:
initialize : function() { var self = this; this.model1.fetch({success: function(){ self.model2.fetch({success: function(){ self.render(); }); }}); } И вот такая вложенность мне не очень нравиться, можно как нибудь от нее избавиться? Т.е. как лучше это сделать? В идеале хотелось бы получить как у gmail. :help: |
Странно, что никто так и не ответил тут. Задача на самом деле очень распространенная. Если топикстартеру ещё актульно, то подскажу. Тебе нужно изучить тему deferred-объектов в jQuery. Любой AJAX-запрос в последних версиях является таким объектом. Такие же объекты можно создавать и для своих нужд. Не буду вдаваться в подробности - в сети куча уже информации на эту тему. Конкретно в твоём случае решение таково:
Раз Model::fetch возвращает deferred-объект, значит делаем так initialize: function() { var self = this; $.when(this.model1.fetch(), this.model2.fetch()) .done(function() { // Здесь код в случае успешного выполнения всех запросов self.render(); }) .fail(function() { // Здесь код, если произошел сбой }); } Здесь метод $.when() ждет когда будут выполнены все deferred объекты. Их может быть сколько угодно: $.when(this.model1.fetch(), this.model2.fetch(), ...., this.modelN.fetch()) |
Часовой пояс GMT +3, время: 14:38. |