我有一个如此定义的路由器:
var MyRouter = Backbone.Router.extend({
routes: {
// catch-all for undefined routes
"*notfound" : "notFound",
},
initialize: function(options) {
this.route("my_resource/clear_filters", 'clearFilters');
this.route("my_resource/:id", 'show');
},
show: function(id){
console.log('show', id);
},
clearFilters: function() {
console.log('clearFilters');
},
notFound: function() {
console.log('notFound');
},
});
var app = {};
app.MyRouter = new MyRouter();
Backbone.history.start({silent: true});
因此,以下网址将映射为:
var opts = {trigger: true};
app.MyRouter.navigate('/foo', opts); // logged -> 'notFound'
app.MyRouter.navigate('/my_resource/123', opts); // logged -> 'show', '123'
app.MyRouter.navigate('/my_resource/clear_filters', opts); // logged -> 'clearFilters'
app.MyRouter.navigate('/my_resource/some_thing', opts); // logged -> 'show', 'some_thing'
如何限制my_resource/:id
路线仅匹配数字参数,以便app.MyRouter.navigate('/my_resource/some_thing')
处理notFound
?
答案 0 :(得分:2)
来自fine manual:
路线
router.route(route, name, [callback])
手动为路由器创建路由,
route
参数可以是路由字符串或正则表达式。路由或正则表达式中的每个匹配捕获都将作为参数传递给回调。
所以你总能说出这样的话:
this.route(/my_resource\/(\d+)/, 'show')
在路由器的initialize
中,如果你需要对路线进行更细粒度的控制,而不是Backbone的字符串模式给你。