5

我正在尝试在 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. 'index' 函数目前根本没有触发,无论我转到 = 的 URL/还是/england其他任何东西。
  2. 我也不清楚可选参数是否会按照我设置的方式工作 - 可以像这样连续有两个可选参数吗?我还不知道我需要支持多少个国家,所以我确实希望country参数是一个参数,而不是指定单个国家。

如果可能的话,我宁愿使用正确的 URL 路由而不是正则表达式解析。

4

2 回答 2

14

如果您想像您的示例一样将所有 url(包括根)路由到一种方法,您只需要定义一个路由:

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

因为这两个参数都是可选的,所以这将匹配:

  • "" (空字符串)
  • “英国”
  • “英国/伦敦”

如果您只想要格式为的路由englandengland/london不是 root page /,请声明一个单独的空路由,并使该:country部分非可选:

routes: {
  "" : "home",
  ":country(/:city)": "index"
}
于 2013-01-18T12:18:47.200 回答
2

如果您想拥有一条路线并且可以灵活地更改您希望 url 的外观。你也可以考虑

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

匹配

"" (Empty string)
"country/england"
"country/england/city/london"
于 2013-07-29T17:05:06.783 回答