Backbone.js路由中的变量:需要regex

Variables in Backbone.js routes: regex required?

本文关键字:需要 regex 变量 js 路由 Backbone      更新时间:2023-09-26

我想要一个如下工作的主干路由设置:

  • /country/[any string]这样的路由,其中countryusca,应该都去handleByCountry(country, location)
  • 任何其它路由都应当重定向到CCD_ 6并且由CCD_

目前我有(作为一个粗糙的第一次尝试):

  var AppRouter = Backbone.Router.extend({
      routes: {
          "ca/:str": "handleByCountry",
          "us/:str": "handleByCountry",
          "*route": "home" 
      },
      handleByCountry: function(str){
          console.log('ROUTE handleByCountry', route); 
          // how to get the country? parse route by hand?
      },
      home: function(route){
          this.navigate('/');
      },
  });

这有以下问题:

  • 不是DRY-我可以写一个同时匹配caus的路由吗?我需要某种条件变量,也许是正则表达式
  • 如何从handleByCountry内部查看当前国家/地区?我需要再次解析路由字符串吗

此外,像我现在所做的那样,将其他路由转发到/是否是一种良好的做法?

是的,您可以为ca和us 编写单一路由

routes: {
    ":country/:str": "handleByCountry",
    "*route": "home" 
},
handleByCountry: function(country, str){
    console.log('country is:', country, ' and str is: ', str, route); 
},

我们使用了类似的模式,以与重定向到主页相同的方式将所有未知的路由重定向到404,所以我相信这是正确的方法

如果需要更多的自定义路由,可以使用路由器初始值设定项中的路由方法将自定义正则表达式作为路由而不是骨干路由字符串传递。