Backbone fetch,promises和if else。它们是如何工作的?

时间:2013-08-20 08:26:14

标签: javascript jquery backbone.js promise

我有一个问题,我不确定如何在我的骨干应用程序中巧妙地解决。我有一个视图,需要提取2或3个不同的模型。

我有一个个人资料视图,向客户显示他的任务和个人资料信息,但是当教练访问它时,我还想加载教练模型以使教练能够切换内容。

promises如何使用if else语句?我可以按照我编写的方式编写代码并以这种方式工作吗?

var tasks = new App.Task.Collections.Tasks();
var coaches = new App.Coach.Collections.Coaches();
var user = new App.User.Models.User();

if(App.User.Models.currentUser.isCoach()){

    var userPromise = user.fetch();
    var coachPromise = coaches.fetch();
    var tasksPromise = tasks.fetch({
        data: {
            userId: userdId
        }
    });

    $.when(userPromise, coachPromise, tasksPromise).then(function(){

        App.Layout.page.show(layout);
    });

}else{

    var userPromise = user.fetch();
    var tasksPromise = tasks.fetch({
        data: {
                userId: userdId
        }
    });


    $.when(userPromise, tasksPromise).then(function(){

        App.Layout.page.show(layout);
    });
}

promises如何使用if else语句?

2 个答案:

答案 0 :(得分:1)

您的代码看起来是正确的。代码中的if / else语句不会影响所有承诺,因为您在相应的块中拥有所有.fetch()个调用。只需记住将所有这些集合传递给您正在显示的布局。

答案 1 :(得分:0)

您可以在数组上收集您的承诺,然后将它们传递给$ .when

var promises = [];

promises.push( modelA.fetch() ); // default
if(value){ 
   promises.push( modelB.fetch() ); // conditionally added
}

$.when.apply($, promises).then(function(){
   // do your stuff
});