Backbone多次集合提取

Ily*_*hov 6 jquery backbone.js

是否有更性感的方式做到以下几点:

scheduleSubjects.fetch({
    success: function(){
        subjectList.fetch({
            success: function(){
                assignments.fetch({
                    success: function(){
                        _this.render();
                    }
                });
            }
        });
    }
});
Run Code Online (Sandbox Code Playgroud)

我希望在开始操作之前检索所有数据.

谢谢.

McG*_*gle 8

使用JQuery的延迟对象,您可以使用$.when在多个异步调用完成时触发回调:

$.when(scheduleSubjects.fetch(), subjectList.fetch(), assignments.fetch()).then(_this.render);
Run Code Online (Sandbox Code Playgroud)

请注意,这是有效的,因为它JQuery.ajax也会Backbone.fetch返回一个延迟对象.


替代.thenis .done,它会传递原始回调的参数(在OP中不需要,但在某些情况下可能会这样):

$.when(scheduleSubjects.fetch(), subjectList.fetch(), assignments.fetch())
    .done(function(scheduleSubjects, subjectList, assignments) {
        _this.render();
    })
);
Run Code Online (Sandbox Code Playgroud)


ben*_*e89 7

var collections = [scheduleSubjects, subjectList, assignments];
var complete = _.invoke(collections, 'fetch');

$.when(null, complete).then(function(){
    _this.render();
});
Run Code Online (Sandbox Code Playgroud)

使用Promises和Underscore _.invoke()!

  • 为什么第一个参数是`$ .when()``null`? (4认同)