2012-11-13 7 views
5

내 앱에는 다른 사용자 계정이 있습니다. 내가 뭘 하려는지 .fetch() 때까지 loader.gif 표시 리소스 url +에서 콘텐츠를 가져 오는 및 렌더링보기를 렌더링하고 loader 가져 오기가 완료되면 숨 깁니다.백본 fetch() 성공 콜백이 작동하지 않습니다.

이제 사용자가 로그인하면 TODO 항목 의 목록이 Todos.fetch에 의해 페치되고 성공 콜백시 loader.gif이 사라집니다.

$("#app").hide(); 
$(".loader").show(); 
Todos.fetch({ 
    success: function(){ 
      $("#app").show(); 
      $(".loader").hide(); 
     } 
}); 

이 더 Todo 항목이없는 제외한 모든 사용자에 대해 잘 작동합니다. 이러한 사용자의 경우 성공한 콜백이 발생하지 않으며 loader.gif이 유지됩니다. loader.gif을 숨길 수있는 다른 방법이 있습니까?


는 심지어 하나의 모델이 컬렉션에 추가 된 경우에만 success 함수가 호출되는 날 것으로 보인다. 컬렉션에 추가 할 항목이 없으면 success이 호출되지 않습니다.

+3

문제를 설명하는 코드가 도움이 될 것입니다. – nikoshr

+0

코드가 추가되었습니다. 코드에 문제가 있다고 생각하지는 않지만,'Todo' 아이템을로드 할 때, 즉'Todos' 콜렉션에 추가 할 것이있을 때 함수가 호출되기 때문에. 하지만,'Todos' 콜렉션에 추가 할 것이 없을 때, 그 함수는 호출되지 않습니다. –

답변

19

BackboneJS는 대리인을 동기화하도록 가져옵니다. sync는 jqXHR 객체를 반환합니다.

당신은 단지 수 :

Todos.fetch({ 
    success: function(){ 
      $("#app").show(); 
      $(".loader").hide(); 
     } 
}).always(function() { $(".loader").hide() }); 

당신은 this blog post에 대한 자세한 내용을보실 수 있습니다.

그 외에도 컬렉션이 비어있을 때 서버가 유효한 json을 반환하는지 확인하십시오. 응답이 유효한 json이 아니면 실패합니다.

+0

그레이트 찾을 :) 덕분에 톤 및 대부분의 것들을 돌보는 레일을 사용하고 있습니다. –

+1

니스 찾기! 그러나 성공 콜백에서 기대할 수있는 (모델, 응답, 옵션) 인수는 제공하지 않는다는 점에 유의하십시오. 모델을 다시 액세스 할 수있는 또 다른 방법을 찾아야합니다. 성공 콜백에서 수행하고있는 경우입니다. – Micros

관련 문제