2012-06-26 2 views
4

Backbone.js는 않는, 그 Backbone.router 객체에 대한 navigate(fragment, [options]) 방법을 제공 (문서 당) 다음백본 라우터 = 거짓 옵션

응용 프로그램에서 지점에 도달 할 때마다 URL로 저장하려면 navigate으로 전화하여 URL을 업데이트하십시오. 경로 기능을 호출하려는 경우 trigger 옵션을 true으로 설정하십시오. 브라우저 기록에 항목을 만들지 않고 URL을 업데이트하려면 replace 옵션을 true으로 설정하십시오.

따라서 appRouter.navigate('page');을 호출하면 아마도 해당 경로를 트리거하지 않고 www.myapp.com/page으로 URL이 변경됩니다. 그러나 라우터가 으로 리디렉션되고 실제로 trigger=false이라는 사실에도 불구하고 페이지 경로를 트리거한다는 사실을 발견했습니다.

> home route 
> page route 

을 예상 콘솔 출력 단지되어야 할 때 :

따라서

, 다음 코드 www.myapp.com 탐색시

$(function(){ 
var AppRouter = Backbone.Router.extend({ 

    routes: { 
     '': 'home', 
     'page': 'page', 
    }, 

    home: function() { 
     window.app.navigate('page', {replace: true});   
     console.log('home route');  
    }, 

    page: function() { 
     console.log('page route'); 
    }, 

}); 

window.app = new AppRouter(); 
Backbone.history.start({pushState: true}); 
}); 

는 다음 콘솔 출력을 생성

> home route 

이 방법은 기본 trigger 옵션을 따르지 않는 것으로 보입니다. 이것은 구현의 버그입니까, 아니면 내가 오해입니까?

+0

'trigger : false'가 설정된 상태에서 올바르게 작동합니까? – jakee

+0

@jakee : 아니요, 'window.app.navigate ('page ', {trigger : false, replace : true});는 여전히 동일한 동작을 생성합니다. 'window.app.navigate ('page');'도 마찬가지입니다. – Matm

+1

은'Backbone.history.start'에서'pushState : true'를 제거하고 원래의 탐색 호출로 시도합니다. 내가 봤 거든 주위에'pushState : true'와'navigate'가 제대로 작동하지 않을 수 있습니다. – jakee

답변

0

에서 pushState: true을 제거하고 원래 navigate 전화로 시도하십시오.

나는 이것에 대한 해결책을 찾기 위해 주위를 둘러 보았지만 역사 API에 대한 막연한 발언은 모두 백본 라우터의 탐색 기능이 제대로 작동하지 않게하는 pushState: true입니다. 나의 Googlings의 예를 들어, this 기사는 내가 발견 할 수있는 가장 좋은 자료였습니다.

관련 문제