これは、ソリューションの実用的な例です-jsfiddle.net/avrelian/dGr8Y/Backbone.history.navigate
、ただしjsFiddleではメソッドが正しく機能しません。
ボタンがあるとします
<input class="fetch-button" type="button" value="Fetch" />
とハンドラー
$('.fetch-button').click(function() {
Backbone.history.navigate('posts/?author=martin', true);
});
これは私たちの投稿のコレクションです
var Posts = Backbone.Collection.extend({
url: 'api/posts'
});
これは、カスタムパラメータエクストラクタを備えたルーターです
var Router = Backbone.Router.extend({
routes: {
'posts/?:filters': 'filterPosts'
},
filterPosts: function(filters){
posts.fetch({data: $.param(filters)});
},
_extractParameters: function(route, fragment) {
var result = route.exec(fragment).slice(1);
result.unshift(deparam(result[result.length-1]));
return result.slice(0,-1);
}
});
簡略化された$.deparamアナログです。代わりに独自のものを使用できます。
var deparam = function(paramString){
var result = {};
if( ! paramString){
return result;
}
$.each(paramString.split('&'), function(index, value){
if(value){
var param = value.split('=');
result[param[0]] = param[1];
}
});
return result;
};
そして最後に、投稿コレクションとルーターオブジェクトのインスタンス化
var posts = new Posts;
var router = new Router;
Backbone.history.start();
ユーザーがボタンをクリックすると、アドレスバーがに変わりますmyapp.com/s/#posts?author=martin
。記号に注意してください#
。ハッシュクエリ文字列を使用します。もちろん使用できますがpush state
、まだ普及していません。