【问题标题】:Backbone Router route definition to handle all these conditions处理所有这些情况的骨干路由器路由定义
【发布时间】:2014-09-18 15:50:54
【问题描述】:

我想要的是一条可以在 1 行中处理以下所有路线的路线。

目前看起来是这样的:

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(*) 提到的 here

这有效'item(*thing)': 'itemController',但控制器传递了一个字符串,然后我必须拆分它而不是什么。我宁愿将它们作为参数 (action, id) 传递给我的控制器,而不是单个字符串参数。

【问题讨论】:

    标签: javascript backbone.js backbone-routing


    【解决方案1】:

    路线中的可选部分(/:optional) 可以解决问题:

    var Router = Backbone.Router.extend({
        routes: {
            'item(/:action)(/:id)': 'itemController'
        },
    
        itemController: function (action, id) {
            console.log(action, id);
        }
    });
    

    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>

    【讨论】:

    • 完美。并且回答得很好。谢谢。我通过这样做item(/:action(/:id)) 离得更近了,但你的回答要好得多
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-11
    • 1970-01-01
    • 2013-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-21
    相关资源
    最近更新 更多