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, время: 11:20. |