2012-04-11 4 views
1

나는 Backbone.js가있는 Rails 3.2.3 앱이 있으며 내 Backbone.history에는 pushState를 사용하고 있습니다.Backbone.js 경로가 트리거되지 않습니다.

문제점

내가 ID와 약속을 보여주는 '/ foo는'말을가는 링크를 클릭하면 : 1, 다음 백본 ​​라우터 내가 빨리 레일 라우터 전에 볼 수있는, 먼저에 도달 대신/foo에 대한 경로가 없다고 불평합니다.

내 Backbone.js 코드가 여기 내 백본 라우터입니다.

동일한 페이지에 있어야하고 #app div의 끝에 'foo'를 첨부해야합니다.

백본 지수 뷰어

window.AppointmentListView = Backbone.View.extend({ 
    template: JST["appointments/index"], 
    events: { 
     "click .foo": function(){Backbone.history.navigate("foo");}, 
    }, 
    comparator: function(appointment){ 
     return appointment.get('topic'); 
    }, 
    initialize: function(){ 
     this.collection.on('reset', this.addAll, this); 
    }, 
    render: function(){ 
     this.$el.html(this.template); 
     this.addAll(); 
     return this; 
    }, 
    addAll: function() { 
     this.collection.forEach(this.addOne, this); 
    }, 
    addOne: function(appointment){ 
     var appointmentView = new AppointmentView({model: appointment}); 
     this.$el.append(appointmentView.render().el); 
    } 
}); 

응용 프로그램/자산/템플릿/약속/Index.jst.ejs

<h1>Appointments</h1> 
<a href="/foo" class="foo">Say Foo</a> 
<a href=appointments/add>Add</a> 
<div id="app"></div> 

그것은 나를 기록을 보존 할 수 있습니다 나는이 pushState를 사용했다 및 뒤로 버튼 기능.

Backbone.history.navigate는 내 백본 경로를 호출하지 않고 대신 레일 경로를 호출합니다. 이 문제를 해결하려면 어떻게해야합니까?

'약속/1'과 같은 경로를 허용하고 제어권을 받도록 백본을 설정해야합니까, 아니면 위와 같이 Backbone.history.navigate 호출로 클릭 이벤트를 사용해야합니까?

답변

0

click .foo 이벤트 핸들러에서 false를 반환해야합니다. 그렇지 않으면 링크를 정상적으로 클릭 한 것처럼 브라우저가 계속 실행되고 서버에서 실제 /foo 페이지를 요청합니다.

나는 Backbone.history.navigate("foo");에 대한 전화를 가지고 있다고 생각합니다 - Backbone.history에는 설명서에서 볼 수있는 한 navigate 기능이 없습니다. 실제로는 Backbone.Router 인스턴스에서 .navigate를 호출하고 trigger 옵션을 전달하여 경로를 호출하도록해야합니다. 예를 들어 :

window.AppointmentApp.navigate("foo", { trigger : true }); 

당신은 이미 알고 있습니다하지만 당신은 pushState를 사용하여 계획하고 있다면 당신은 정말 당신의 클라이언트 측이하는 모든 URL을 지원하기 위해 서버 측을 업데이트해야합니다. 그렇지 않은 경우 사용자가 &을 다른 탭에 붙여 넣기로 결정하면 경로가 없다는 내용의 레일로 실행됩니다.

+0

pushState의이면에있는 전체 아이디어가 URL 조각을 사용할 필요가 없다고 생각 했나요? – map7

+0

pushState를 제거하고 네비게이션 줄을 "#/foo"로 변경하면 모두 작동하지만 URL이 실제 URL이 아닌 부분으로 변경됩니다. pushState를 사용하여이 작업을 수행 할 방법을 찾고 있습니다 – map7

+0

@ map7 아, 미안하지만, 당신이 무엇을 묻고 있는지 잘 알지 못했습니다. 내 대답을 업데이트했습니다 – obmarg

관련 문제