2012-04-11 14 views
1

私はBackbone.jsでRails 3.2.3アプリを持っていて、私は自分のBackbone.historyでpushStateを使っています。Backbone.jsルートが起動されていません

問題

私はIDと予定を表示するには、「/ foo」で言って行くのリンクをクリックすると:私はすぐにRailsのルーターの前に見ることができます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はバックボーンルートを呼び出さず、代わりにRailsルートを呼び出します。これを修正するにはどうすればいいですか?

「予定/ 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

関連する問題