骨干路由器路由定义,以处理所有这些条件

Backbone Router route definition to handle all these conditions

本文关键字:处理 所有这些 条件 定义 路由器 路由      更新时间:2023-09-26

我想要的是一个可以在一行中处理以下所有路由的路由。

目前看起来是这样的:

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>

相关文章: