我有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) {
});
}
答案 0 :(得分:0)
您可以添加else
子句立即解决myDeferred1
。
if (typeof personId !== "undefined") {
//... as in question
} else {
myDeferred1.resolve({});
}
通过使用空的普通对象进行解析,您可以测试myObj1.attr1
和myObj1.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)
。