我想要的是一个可以在一行中处理以下所有路由的路由。
目前看起来是这样的:
routes: {
'item': 'itemConsole',
'item/view/:workflowId': 'itemDetail',
'item/create': 'itemCreate',
'item/create/:templateId': 'itemCreate',
'item/task/:taskId': 'itemTask',
'item/metrics': 'itemMetrics',
'item/notAccessible': 'itemNotAccessible',
}
我想用这里提到的splat(*)把它浓缩成
这在'item(*thing)': 'itemController'
中起作用,但控制器会传递一个字符串,然后我必须对其进行拆分等等。我宁愿它将它们作为参数(action, id)
传递给我的控制器,而不是单个字符串参数。
路线(/:optional)
中的可选部件可以做到这一点:
var Router = Backbone.Router.extend({
routes: {
'item(/:action)(/:id)': 'itemController'
},
itemController: function (action, id) {
console.log(action, id);
}
});
演示http://jsfiddle.net/nikoshr/w10Lpkcm/
一段
var Router = Backbone.Router.extend({
routes: {
'item(/:action)(/:id)': 'itemController'
},
itemController: function (action, id) {
$('#log').append(JSON.stringify({
action: action,
id: id
}));
}
});
new Router();
Backbone.history.start();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="http://underscorejs.org/underscore-min.js"></script>
<script src="http://backbonejs.org/backbone-min.js"></script>
<a href='#item'>#item</a>
<hr />
<a href='#item/view'>#item/view</a>
<hr />
<a href='#item/view/1'>#item/view/1</a>
<hr />
<a href='#item/create'>#item/create</a>
<hr />
<a href='#item/create/2'>#item/create/2</a>
<div id='log'></div>