jQuery条件不同解析

时间:2014-09-18 13:09:24

标签: javascript jquery jquery-deferred deferred

我有2个模型对象和一个视图。我用deferred来解决这些问题。 现在虽然视图总是在那里,但我可以根据条件要求解决其中一个或两个模型对象。 以下是代码;

var self = this,
myDeferred1 = new $.Deferred(),
myDeferred2 = new $.Deferred(),
viewDeferred = new $.Deferred();

if (typeof personId !== "undefined") {
    var myObj1 = new MyObj1({
        attr1  : attrId1,
        attr2   : personId
    });

    myObj1.fetch({
        success: function() {
            myDeferred1.resolve(myObj1);
        }
    });
}

var myObj2 = new MyObj2({
        attr1  : attrId1
    });

myObj2.fetch({
    success: function() {
        myDeferred2.resolve(myObj2);
    }
});


require(['myView'], function(MyView) {
                viewDeferred.resolve(MyView);
            });

$.when(myDeferred1, myDeferred2, viewDeferred).then(function(myObj1, myObj2, MyView) {

});         

我的问题是,因为myDeferred1只会有条件地进入图片(typeof personId!==" undefined")

在执行

时如何检查相同内容
  

$。when(myDeferred1,myDeferred2,viewDeferred).then(function(myObj1,   myObj2,MyView)

我是否必须通过执行if..else来复制代码...如下所示或者有更好的方法吗?

if (typeof personId !== "undefined") {          
    $.when(myDeferred1, myDeferred2, viewDeferred).then(function(myObj1, myObj2, MyView) {
    });         
} else {
    $.when(myDeferred2, viewDeferred).then(function(myObj2, MyView) {
    });         
}

1 个答案:

答案 0 :(得分:0)

您可以添加else子句立即解决myDeferred1

if (typeof personId !== "undefined") {
    //... as in question
} else {
    myDeferred1.resolve({});
}

通过使用空的普通对象进行解析,您可以测试myObj1.attr1myObj1.attr2,而不会抛出错误。

例如:

$.when(myDeferred1, myDeferred2, viewDeferred).then(function(myObj1, myObj2, MyView) {
    if(myObj1.attr1 && myObj1.attr2) {
        // personId *was not* undefined 
    } else {
        // personId *was* undefined 
    }
});

或者,如果personId仍然在范围内(并且保证在异步活动期间没有更改),则只需再次测试if(personId !== undefined)