2017-01-30 7 views
0

새로운 마이크로 API 기반 웹 사이트를 부트 스트랩하기가 매우 쉽고 빠르기 때문에 백본 사용자를 사용하고 있습니다.컬렉션 제목을 클릭하면 Backbonejs 렌더링 컬렉션

질문은 컬렉션 그룹을 클릭 할 때 컬렉션로드 및 렌더링과 관련하여 가장 좋은 방법입니다.

나는 브랜드의 정적 목록이 있다고 가정 해 봅시다. 브랜드를 클릭하면 컬렉션 가져 오기가 시작되고 가져 오기가 성공적으로 끝나면 컬렉션을 렌더링합니다.

이전 클릭이 처리되지 않은 브랜드를 사용자가 클릭하면 문제가 발생합니다. 따라서 두 브랜드가로드되고 렌더링 된 두 개의 컬렉션이 있습니다. "취소"또는 첫 번째 가져 오기를 무시하고 마지막으로 사용자가 클릭 한 것을 렌더링하기 위해이를 처리하는 가장 좋은 방법은 무엇입니까?

요청이 처리 될 때까지 브랜드 목록을 비활성화하는 것으로 해결책을 찾았지만 사용자가 결과를 기다리지 않고 다른 것을 즉시 클릭하려고 할 수 있으므로 UX를 귀찮게합니다 (예를 들어 누락 된 경우)

+1

등뼈가 가장 잘 작동합니다. 동시에 2 개의 콜렉션을로드하는 데 문제가 있어서는 안됩니다. 비록 [mcve] 없이는 우리는 당신의 해결책을 판단 할 수 없습니다. –

+0

또한 작업 코드 조각을 개선하는 방법에 대한 팁을 보려면 [codereview.stackexchange.com] (http://codereview.stackexchange.com/)을 살펴보십시오. –

답변

0

에서 반환 된 기본 xhr 개체는 현재 요청을 취소 할 수 있습니다 (xhr.abort()).

사용자가 클릭하여 컬렉션을 가져 오면 반환 값을 저장하십시오.

var xhr = myCollection.fetch()

xhr 당신에게 요청의 현재 상태를 알려 속성이 있습니다.

https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/readyState

사용자가 다시 클릭하고 다른 요청이 아직 처리하는 동안이 요청의 중간에 있다면, 단순히 xhr에게 가져 컬렉션을 발생하면

. 현재 가져 오기가있는 경우 중단하고 현재 가져 오기를 계속하고 xhr 개체를 다시 할당합니다.

샘플 코드 : 당신이 xhr 개체에 대한 참조를 저장하는 방법

function userClickedSomething(){ 
    if(xhr.readyState > 0 && xhr.readyState < 4) 
     xhr.abort() 
    xhr = myCollection.fetch() 
} 

당신에게 달려 있습니다.

자세한 내용 : 응용 프로그램의 모든 부분은 구성 요소 인 경우 Is it possible to stop Backbone "read" requests

+0

밑에있는 xhr은''jhXXRR'' (http://api.jquery.com/jQuery.ajax/#jqXHR)이며''XMLHttpRequest''와의 호환성을 위해'readyState'를 나타냅니다. 그것은 요청의 상태를 확인하는 더 나은 대안을 제공하는 [Promise] (http://api.jquery.com/Types/#Promise) 인터페이스를 구현합니다 : ['.state()'] (http : // api .jquery.com/deferred.state /). 'readyState'와 같은 매직 넘버 대신 비교할 문자열을 반환합니다. –