特定のユーザーのuser_idであるページhttp://www.domain.com/user/123
があります。123
タブ付きのインターフェイスがあり、タブをクリックすると、アドレスバーが新しいURLで更新されます。
例:をクリックすると<a href="likes" data-toggle="tab">Likes</a>
、アドレスバーが次のように更新されます。http://www.domain.com/user/123/likes
問題: backbone.jsにプッシュステートを実装しようとしていますが、を使用するとURLを正しく取得できないようですapp.navigate()
。ルートをとしてroot
使用して、ルーターに属性を設定してみました。user_idを末尾に追加するにはどうすればよいですか?すなわち。Backbone.history.start({ pushState: true, root: "/user/" });
http://www.domain.com/user/
root
http://www.domain.com/user/123/
//Router
var AppRouter = Backbone.Router.extend({
routes: {
'': 'likes',
'likes': 'likes',
},
likes: function() {
console.log('fn likes');
$('#tab_likes"').show();
}
});
var app = new AppRouter();
Backbone.history.start({ pushState: true, root: "/user/" });
$(function() {
// Update address bar URL
$('a[data-toggle="tab"]').on('click', function(e) {
app.navigate(e.target.getAttribute('href'));
});
});
更新されたコード
URLからを取得した後にのroot
属性を更新するにはどうすればよいですか?以下に示す現在の方法は機能しませんBackbone.history
user_id
// Router
var AppRouter = Backbone.Router.extend({
routes: {
':user_id/likes': 'likes',
':user_id/': 'likes'
},
set_user_id: function($user_id) {
this.user_id = $user_id;
// ADD SOME CODE TO CHANGE Backbone.history's root attribute
},
likes: function($user_id) {
console.log('fn likes');
this.set_user_id($user_id);
$('#tab_likes"').show();
}
});
var app = new AppRouter();
Backbone.history.start({
pushState: true,
root: '/user/' + app.user_id + '/' // app.user_id is undefined at the time this is called
});