jQuery의 .one()
을 사용하는 것과 유사한 방식으로 .done()
콜백이 한 번 실행 된 후에 jQuery의 $.when()
을 바인딩 해제 할 방법을 찾고 있습니다. 단일 이벤트의 경우 .on()
대신 이 상황에서 이벤트 대신 지연된 객체를 사용하는 이유는 콜백을 실행하기 전에 여러 비동기 프로세스가 완료 될 때까지 기다려야하기 때문입니다.
자세한 내용을 보려면 각 페이지에 대한 모델과 뷰가있는 백본 응용 프로그램에서 작업하고 있습니다. ,
$.when()
비동기 프로세스 (3 기다려야 페이지 (A)에 의해 사용되는 렌더링하라고 들어오는 페이지
- 보기 (페이지 A를 호출) : 새 페이지를 표시하는 순서는 다음과 같이 보입니다 페이지 A가 서버로부터로드 4 & 5)
- 이전 페이지를 사전로드 된 페이지 B되는 모델에게 페이지 A의 모델
- 화상 채우는
- 데이터를 해결하기 위해, 개폐 완료 (애니메이션) 완료
- 페이지 A가 렌더링됩니다.
각 페이지는 사용자가 한 번만 방문하는 가상 시나리오에서 잘 작동합니다. 그러나 페이지는 분명히 반복적으로 방문 할 수 있습니다. 즉, 페이지 B가 열리고 사용자가 웹 사이트의 다른 곳을 탐색 한 후 다시 닫히면 코드 블록을 실행하여 .close()
메소드 완료와 관련된 지연 객체가 다시 한 번 해결됩니다. .done()
콜백 페이지 A의 .render()
메서드가 잘못되었습니다.
$.when().done()
코드 블록은 한 번 실행되는 즉시 "언 바운드"되거나 다른 많은 이벤트 수신기가 언 바운드되는 것과 마찬가지로 각 페이지의 .close()
메서드에서 이상적입니다.
나는 이것이 가능할지 모르겠다. 어쩌면 여기서 내가하려고하는 것을 달성하기위한 대체 방법이 있을지 모르겠다. 어쩌면 그들의 연기가 지연되어 여러 가지 사건을 듣는 경로 일 수 있습니까?
감사합니다.
100 % 분명한 것 : 난 당신이 뭔가를해야한다고 생각? – charlietfl
여기에 대한 이야기는 http://jsfiddle.net/charlietfl/qR4yH/ 일련의 AJAX 호출입니다. 알 수없는 번호이지만 최종 내용은 완료된 모든 호출에 종속됩니다. – charlietfl
구현할 수 있음을 이해합니다. '$. 언제.apply ($, arrayOfDeferreds)'를 사용하여 약속 목록을 기다려야한다.하지만 일단 완료된'$ .when '을 언 바인드하거나 다음 번에 arrayOfDeferreds 인수의 내용을 변경하고 싶다. 페이지가 방문되어 새로운 지연 목록이 해결 될 때까지 기다리고 (더 이상 이전 목록과 관련이 없음) 기다립니다. 이것은'$ .when.apply'가 배열을 참조로 유지하지 않고 단순히 그 내용을 개별 인수로 적용하기 때문에 작동하지 않습니다. – adekom