2014-09-18 6 views
0

두 개의 모델 개체와보기가 있습니다. 나는 이것을 해결하기 위해 연기했다. 이제 뷰가 ​​항상 존재할 때 조건에 따라 해결할 모델 객체 중 하나 또는 둘 다를 가질 수 있습니다. 다음은 코드입니다. myDeferred1는 조건부 그림으로 올 것이기 때문에jQuery 조건부 해결 방법

$ .when을 (수행 할 때

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) { 

});   

내 질문 (대해서 typeof personId! == "정의되지 않은")

는 어떻게 확인합니까 동일 myDeferred1, myDeferred2, viewDeferred) 그 때는 (기능 (myObj1, myObj2, MYVIEW)

나는 수행하여 코드를 복제해야 만약 .. 아래처럼 ... 아니면 더 좋은 방법이 있을까요?

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

'personId' 발생과 상관없이'myDeferred1'을 해결하고 콜백에서 반환 된 데이터를보고 처리하는 것이 어떻습니까? – Johan

+0

@testndtv'.then (function (myObj1, myObj2, MyView)'및'.then (function (myObj2, MyView) ') 사이에'then()'의 본문이 다른가요? – guest271314

답변

0

즉시 myDeferred1를 해결하기 else 절을 추가 할 수 있습니다.

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

빈 일반 객체로 해결함으로써, 오류를 던지고없이, myObj1.attr1myObj1.attr2을 테스트 할 수 있습니다. 예를 들어

:

personId의 범위가 여전히 (그리고 비동기 활동하는 동안 변경하지 않는 것이 보증되는) 경우
$.when(myDeferred1, myDeferred2, viewDeferred).then(function(myObj1, myObj2, MyView) { 
    if(myObj1.attr1 && myObj1.attr2) { 
     // personId *was not* undefined 
    } else { 
     // personId *was* undefined 
    } 
}); 

또는, 단순히 다시 if(personId !== undefined)을 테스트합니다.