2012-11-11 2 views
1

모델이 있는데 model.fetch();을 사용하여 가져 오려고합니다. 모델의 urlRoot가 내 응용 프로그램의 백 엔드 ("/ backend/item")로 설정되었지만 지금은 백 엔드 환경이 없습니다. 그래서 나는 결과를 조롱하기로 결정했다.백본 모델 가져 오기 - 모의 백 엔드

"backend/item/:id": "data_getItem" 

및 기능 : 나는 내 라우터 내부의 경로를 추가 한 응용 프로그램을 실행할 때 나는 아약스 호출을 볼 수 있습니다

data_getItem: function(id) { 
    console.log("data_getItem: "+ id); 
    return { 
    animals: [ 
     { 
     name: 'flying cat', 
     type: 'none' 
     } 
    ] 
    }; 
} 

을에 "http://127.0.0.1:8000/backend/item/1 "하지만 콘솔이 비어 있고 오류가 발생합니다 (가져 오기 기능을 사용하면 오류 콜백으로 되돌아갑니다). 왜 그런가요? 백엔드를 어떻게 조롱 할 수 있습니까? 편집

사실 @rjz 내가하고 싶은 것들로 저를 도와,하지만 난 정말 아약스 호출이 백본 라우터에 의해 사로 잡았 될 수 있는지 알고 싶어요. 아약스 호출이 백본 클라이언트 코드를 실행할 수 없기 때문에 내 직감이 아니라고 말합니다. 따라서 라우터 개념은 관련이 없습니다. 내가 맞습니까? ...

+0

너는 http://stackoverflow.com/questions/5096549/how-to-override-backbone-sync – rjz

+0

을 읽을 수있다. 사실,이게 도움이되었지만, 아약스 호출이 접근 할 수 있는지 알고 싶다. 노선. – Naor

답변

0

Backbone.Router을 사용하여 AJAX 호출을 수신하고 싶지 않습니다. 목표가 프로젝트의 백엔드를 조롱하는 경우이를 수행하기 위해 테스트 프레임 워크를 사용해야합니다. 다운 더러운 방법은 같은 것을 사용하는 것입니다 :

또는 더 많은 단위 테스트 같은 작업을 수행하려는 경우 나는 Jasmine하고 AJAX mocking library 볼 것이다.

짧은 대답하는 Backbone.Router는 AJAX 호출을 가로 챌 수없는입니다 :

업데이트 귀하의 질문에 대답합니다.

라우터가 URL과 관련된 이벤트를 수신하여 작동하기 때문입니다. 특히 라우터는 hashchange 또는 popstate 이벤트를 청취하고 있습니다 (pushState을 사용하고 있는지 여부에 따라 다름). AJAX 호출은 URL과 상호 작용하지 않기 때문에이 시스템을 거의 완전히 건너 뜁니다.

+0

고마워,하지만 백본 라우터에 의해 막히게 될 아약스 호출의 가능성에 대해 묻고있다. 나는 이것이 최적이 아니거나 그것을 할 수있는 방법이 아니라는 것을 안다. (그리고 나는 그것을 사용하지 않을 것이다.) 그러나 나는 단지 가상적인 것을 묻는다. – Naor

+0

질문에 대한 대답을 추가했다. 짧은 대답 : 불가능하지 않습니다. –

관련 문제