Backbone.js中的可选路由参数? (再次)

时间:2013-01-18 11:44:20

标签: javascript backbone.js javascriptmvc backbone-routing

我正在尝试在Backbone 0.9.10中设置路由。我想匹配以下类型的路线:

/england/
/england/birmingham
/france
/france/paris
... 

等。这就是我目前在路由器中的内容:

var AppRouter = Backbone.Router.extend({
  routes: {
    "": "index",
    "(/:country)": "index",
    "(/:country)(/:city)": "index"
  },
  index: function(country, city) { 
      console.log('index', country, city);
  }
});
var StateApp = new AppRouter();
Backbone.history.start({ pushState: true });

我有两个问题:

  1. “索引”功能目前根本没有触发,无论我转到哪个网址= //england或其他任何内容。
  2. 我也不清楚可选参数是否会按照我设置的方式工作 - 是否可以在这样的行中有两个可选参数?我不知道还需要支持多少个国家/地区,所以我确实希望country参数成为参数,而不是指定各个国家/地区。
  3. 如果可能的话,我宁愿使用正确的URL路由而不是正则表达式解析。

2 个答案:

答案 0 :(得分:14)

如果您希望将所有网址(包括根网址)路由到一个方法,您只需要定义一条路线:

routes: {
  "(:country)(/:city)": "index"
}

由于这两个参数都是可选的,因此匹配:

  • “”(空字符串)
  • “英格兰”
  • “英格兰/伦敦”

如果您只想要格式为englandengland/london但不是根页/的路线,请声明一条单独的空路线,并将:country部分设为非 - 可选:

routes: {
  "" : "home",
  ":country(/:city)": "index"
}

答案 1 :(得分:2)

如果您想拥有一条路线,并且可以灵活地更改您想要的网址。你也可以考虑

routes: {
 "(/country/:country)(/city/:city)": "index"
}

匹配

"" (Empty string)
"country/england"
"country/england/city/london"