2013-10-21 3 views
6

가 다음을 수행하는 섹시 방법이 있나요 가져옵니다.백본 여러 컬렉션

감사합니다.

+4

일정 변경 일정을 제출할 대상이 섹시 대상입니다. ;) –

+2

중첩 호출이 상위 호출에 종속되어 있습니까? –

답변

8

콜백을 트리거하기 위해, 당신은 $.when을 사용할 수 있습니다 JQuery's deferred objects을 사용하여 페치 렌더링하는 것입니다 따라서 Backbone.fetch도 지연된 개체를 반환합니다.


.then에 대한 대안은 당신에게 원래의 콜백의 매개 변수 전달하는 .done이다 (당신이 영업 이익에 필요하지 않습니다,하지만 당신은 어떤 경우 월) :

$.when(scheduleSubjects.fetch(), subjectList.fetch(), assignments.fetch()) 
    .done(function(scheduleSubjects, subjectList, assignments) { 
     _this.render(); 
    }) 
); 
+0

이 솔루션은 매력처럼 작동합니다. 결국 귀하의 답변을 가장 좋게 만들었습니다 :) –

+0

좋지만이 솔루션으로 어떻게로드 진행 상황을 추적 할 수 있습니까? –

0

내가 할 수있는 유일한 방법은 백본의 bind()trigger()입니다.

이벤트를 사용하면이 기능을 사용할 수 있습니다. 더 좋은 방법이 있는지 확실하지 않습니다. 첫 번째 모음을로드하면 두 번째 모음을로드 할 수 있습니다. 이론적으로 두 컬렉션은 예제별로 결합되어서는 안됩니다. 이벤트 기반로드는 subjectListscheduleSubjects과 분리됩니다.

2

당신이 사용할 수있는 하나의 약속 :

scheduleSubjects.done(function() { 
    subjectList.fetch(); 
}); 
subjectList.done(function() { 
    assignments.fetch(); 
}); 
assignments.done(function() { 
    _this.render(); 
}); 
scheduleSubjects.fetch(); 

또는 이벤트 리스너 :

subjectList.listenToOnce(scheduleSubjects, 'sync', subjectList.fetch); 
assignments.listenToOnce(subjectList, 'sync', assignments.fetch); 
this.listenToOnce(assignments, 'sync', this.render); 
scheduleSubjects.fetch(); 

당신은보기 내에서이 리스너를 정의 할 필요가 없습니다. 그들은 응용 프로그램 수준에서 살 수 있습니다. 이 JQuery.ajax을하기 때문에 작동

$.when(scheduleSubjects.fetch(), subjectList.fetch(), assignments.fetch()).then(_this.render); 

참고 : 뷰에 대한 관심 있는 유일한 방법은 한 번 assignments 여러 비동기 호출이 완료 될 때

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

$.when(null, complete).then(function(){ 
    _this.render(); 
}); 

사용 약속 및 밑줄 _.invoke()!

+0

섹시 :) 정확히 내가 무엇을 찾고 있었는지! –

+4

왜'$ .when()''null'의 첫번째 인수는 무엇입니까? –