단일 페이지 웹 애플리케이션이 backbonejs로 작성되었습니다. 나는 다른 경로를 사용하며 각 경로는 컨트롤러에 해당합니다. myapp 루트 URL (myapp.com/) 또는 params (myapp.com/somelocation)가없는 루트가 아닌 URL을로드하면 제대로 작동합니다. 하지만 검색어 매개 변수 (예 : myapp.com/somelocation?z=search)를 사용하여 내 앱을 어느 위치로든로드하려고하면 문제가 발생합니다. 앱은 myapp.com/somelocation?z=search에 해당하는 정확한 컨트롤러와 myapp.com/somelocation에 해당하는 컨트롤러로 두 번 렌더링됩니다. 이 같은라우팅 히스토리를 사용하기위한 Backbone.js 공통 부트 스트랩 패턴
경로 테이블의 모양을
routes: {
'login': 'login',
'home': 'home',
'timeline?*query': 'timelineWithQuery',
'timeline': 'timeline',
...
'*path': 'defaultRoute'
}, ...
컨트롤러는 다음과 같이이 :
// ...
router.navigate(window.location, {trigger: true});
// ...
것은 내가 전화하지 않는 경우 :
defaultRoute: function() {
router.navigate('home', {trigger: true});
},
login: function(args) {
var controller = new App.PageController.Mobile.AuthPageController($('body'));
controller.executeLogin(args);
},
timeline: function(args) {
var controller = new App.PageController.Mobile.TimelinePageController($('body'));
controller.executeTimeline(args);
}, ...
Document.ready 스크립트는 다음과 같습니다 router.navigate (window.location, {trigger : true}); 명시 적으로 아무도 내 응용 프로그램 시작 페이지를 렌더링하지 않습니다. 내가 myapp.com/timeline?foo=bar URL에서 시작하려고 시도 할 때까지 앱을 제대로 호출 할 때 호출됩니다. 그리고 이렇게하면 내 응용 프로그램은 두 번 렌더링됩니다 (페이지를 다시로드하지 않고).
제안 사항? 풍부한 라우팅 시나리오를 가진 백본 기반 단일 페이지 응용 프로그램을위한 일반적인 document.ready 부트 스트랩 패턴은 무엇입니까?
물론 제가 router.navigate (window.location, {trigger : true})를 호출하기 전에 Backbone.history.start()를 사용합니다. 그리고 여전히 쿼리 문자열을 사용하는 일부 경로에 문제가 있습니다. –
내 문서 준비 콜백에서 router.navigate (window.location, {trigger : true}) 대신 Backbone.history.start ({root : window.location})를 사용해야하는 것처럼 보입니다. 하지만 이제 URL 부분을 연결하는 데 어려움이 있습니다. historty.start를 호출 한 후 내 URL은 windows.location + windows.location.path처럼 보입니다. –
REST 서비스에 대해 자세히 읽어보십시오. url.path는 리소스 식별자이므로 탐색 용으로 만 사용해야합니다. 리소스를 찾은 후 url.queryString을 사용하여 출력을 필터링하거나 수정할 수 있습니다. url.queryString을 내비게이션에 삽입하면 안됩니다. 나쁜 습관입니다 ... 백본으로 url.path를 설정하고 수정할 수 있으므로 자동으로 수행되므로 탐색을 사용하지 않아도됩니다. 위치 ... 먼저 Router 인스턴스를 생성합니다. 그 후 domReady에서 기록을 시작합니다. 그 후 역사가 자동으로 다른 모든 작업을 수행합니다. – inf3rno