【问题标题】:Backbone.js route optional parameterBackbone.js 路由可选参数
【发布时间】:2012-03-24 21:59:57
【问题描述】:

Backbone.js 路由中是否可以有可选参数?

例如:

routes:
  "search/[:query]": "searchIndex"

代替:

routes:
  "search/": "searchIndex"
  "search/:query": "searchIndex"

【问题讨论】:

  • Gabe H 的答案应该是公认的答案,而不是@mu 太短。
  • 是的!技术先进!
  • 像“search/:query”这样的路由对我不起作用。但是“搜索”工作正常。有什么想法吗?

标签: javascript backbone.js routes


【解决方案1】:

从 Backbone 0.9.9 开始,您可以添加带括号的可选参数。

例如,在您的路线对象中,您可以定义一个可选的路线部分,如下所示:

routes: {
    "organize(/:action)": "displayOrganize"
}

现在 url 路径将匹配 /#organize 和类似 /#organize/create 的路由。

请记住,如果您需要像/#organize/(带有尾部斜杠)这样的路线被识别,您可以这样做:

routes: {
    "organize(/)(:action)": "displayOrganize"
}

【讨论】:

  • 如何处理 displayOrganize 中的操作?即你能做到displayOrganize: function(action){ if(action){ // do stuff... }} 吗?
  • url = url + '(/)'; //backbonejs 可选处理斜杠
【解决方案2】:

可能最简单的方法就是声明多个路由,一个带有额外的 arg,一个没有:

routes:{
        "authProxy/:hash": "authProxy",                                                                                                                                                                 
        "authProxy/:hash/:url": "authProxy"
}

然后在您的方法中检查它们:

authProxy: function(hash, url){
    if (url){
      // Hash and URL.
    }else{
      // Just hash.
    }
}

请注意,我比其他两个答案更喜欢这个,因为其他开发人员很容易理解发生了什么。

【讨论】:

    【解决方案3】:

    您可以使用the route method 手动添加基于正则表达式的路由:

    路线 router.route(route, name, [callback])

    手动为路由器创建路由,route 参数可以是路由字符串或正则表达式。来自路由或正则表达式的每个匹配捕获都将作为参数传递给回调。

    所以这样的事情应该可以工作:

    this.route(/^search\/(.*)?/, 'searchIndex');
    

    然后searchIndex 将被调用,并以您的无或您的:query 作为其参数。

    缺点是您不能将正则表达式路由放入您的routes 对象中。如果您想将所有路由放在一起,您可以在路由器的 initialize 方法中使用 route 添加所有路由。

    【讨论】:

      【解决方案4】:

      如何使用*splat

      路线 router.routes

      路由哈希将带有参数的 URL 映射到路由器上的函数,类似于视图的事件哈希。路由可以包含参数部分,:param,它匹配斜杠之间的单个 URL 组件;和 splat 部分*splat,可以匹配任意数量的 URL 组件。

      例如,"search/:query/p:page" 的路由将匹配#search/obama/p2 的片段,将"obama""2" 传递给操作。 "file/*path" 的路由将匹配 #file/nested/folder/file.txt,将 "nested/folder/file.txt" 传递给操作。

      【讨论】:

        猜你喜欢
        • 2012-03-27
        • 2013-01-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-22
        • 2015-02-05
        • 1970-01-01
        相关资源
        最近更新 更多