2013-03-27 3 views
0

when을 사용하여 Jquery의 약속을 살펴 봤는데 제 시나리오를 충분히 채울 수 있는지 또는 어떻게해야하는지 다시 생각할 필요가 있는지 궁금합니다.Jquery에 대한 약속 이해

그래서 내가 좋아하는 장소에서 청취자의 부부와 backbone.js 모델이 있습니다

this.on('supplier:change', function(){ 
    $.get('/supplier_details', function(data){ 
     // fill in some fields here 
     anotherAjaxCallInAnotherFunction(); 
    }); 
}); 

anotherAjaxCallInAnotherFunction: function(){ 
    // Another Ajax call 
} 

나는 모든 아약스 호출이 끝날 때까지 기다려야 약속 수있을 것입니다 그래서 model.set({supplier: 'ss'}).done(); 같은 when를 사용한다면 ?

백본 모델에서 여러 Ajax 호출이 필요한 여러 속성을 설정하면 어떻게됩니까? 약속이 모델의 전체 설정을 캡슐화합니까?

$.when(firstAjaxCall, secondAjaxCall) 
    .done( 
     function(firstResp) { console.log(firstResp); }, 
     function(secondResp) { console.log(secondResp); } 
); 

을 또는 성공적으로 firstAjaxCall에 대해 반환 할 때 수 listenTosync 이벤트, 그리고, 당신이 secondAjaxCall를 호출 할 수 있습니다 :

+0

를 = 아니, 트릭을 할 것인가? – Vassilis

+0

그러나 나는 당신이 이미이 일을하지 않은 경우를 대비하여 https://raw.github.com/kriskowal/q/master/design/README.js가 어떻게 작동하는지에 관해 읽을 것을 제안합니다. –

+1

@ant_Ti 확실합니까? 마지막으로 백본이 약속과 완전히 통합 된, 예를 들어'this.model.save(). done() ' – Sammaye

답변

1

내가 실제로이 문제를 시도하기 전까지는 깨닫지 못한 한 가지 사실은 Ajaz 호출을 이런 방식으로 연결할 수 있다는 것입니다. 코딩에 조금 창의적 일 필요가 있습니다.

통화의 이러한 종류의 지금처럼 체인 가장 쉬운 방법 :이 같은 이연 개체가 당신이뿐만 아니라 비동기 호출을 할 수 있도록 할뿐만 아니라 브라우저를 잠그지 않고 그것을 할 것

this.on('supplier:change', function(){ 
    return $.get('/supplier_details').then(function(data){ 
     return anotherAjaxCallInAnotherFunction(); 
    }); 
} 

function anotherAjaxCallInAnotherFunction(){ 
    return $.ajax(); 
} 

그리고 단지 체인 실.

당신은 여기에 더 많은 정보를 찾을 수 있습니다 귀하의 아약스 통화에서 거짓 약속하지만, 비동기 확실하지 http://api.jquery.com/jQuery.Deferred/

0

당신은 시도 할 수 Backbone Events

"동기화"(모델, RESP, 옵션) - 모델 (또는 컬렉션)이 서버와 성공적으로 동기화되었을 때.

+0

주요 문제는 내가 직접 호출 할 수 없다는 것이다. 내 예제를 살펴보면 두 개의 Ajax 호출을 연결하고 약속이 커버 할 수 있는지 알고 싶다. 부모 함수 호출, 플러스 나는 여기서 동기화를하지 않을 것입니다. – Sammaye

+0

'done()'에서 원하는만큼 많은 호출을 중첩시킬 수 있습니다. 왜 그렇게 시도하지 않으시겠습니까? – Joe

+0

대기 대기, Jquery 문서에서 예제 대신 내 예제를 사용하면'done()'내에 호출을 중첩하는 것이 무엇을 의미합니까? 차후 Ajax 호출을'Done()'내에 중첩하면 콜백이없는 상태가 무효화되는 것이 아닙니다. – Sammaye