如何设置Backbone路由

时间:2016-01-26 18:43:21

标签: backbone.js

这是我第一次使用Backbone而且我似乎陷入了基础,所以请耐心等待。

我只想使用Backbone进行路由,我目前正在我的网站的新闻部分进行测试,但我无法获取触发我想要的功能的路由。

这是'我的代码:

var NewsRouter = Backbone.Router.extend({

routes: {
  "*news": "init",
  "news:tmpl": "loadTemplate",

},

init: function(params) {
  //$("#main").load("/news/all");
  console.log('news called')
},

loadTemplate: function(tmpl) {
  console.log('loadTemplate function called')
}

});

var news_router = new NewsRouter;
Backbone.history.start();

我有这条路线正常工作:

mysite.dev/news/ - 控制台显示“被称为新闻”

mystic.dev/news/interviews - 应致电loadTemplate()

我在忙什么?

2 个答案:

答案 0 :(得分:0)

你在'loadTemplate'路线中的“新闻”之后错过了斜线:

  "news/:tmpl": "loadTemplate",

请注意,在您的情况下,路由器仅配置为基于哈希的导航(例如'#news / interview')。您可以通过为“开始”方法指定其他选项来启用基于URL的导航:

Backbone.history.start({ pushState: true });

答案 1 :(得分:0)

我已经过测试了。这很有效。

var NewsRouter = Backbone.Router.extend({

routes: {
  "news": "init",
  "news/:tmpl": "loadTemplate",

},

init: function(params) {
  //$("#main").load("/news/all");
  alert('news called');
},

loadTemplate: function(tmpl) {
  alert('loadTemplate function called: ' + tmpl);
}

});

var news_router = new NewsRouter;
Backbone.history.start();

仅在下面更新部分。

routes: {
  "news": "init",
  "news/:tmpl": "loadTemplate",

},

基本上,除了@Vitaliy Fedorchenko的回答,你还需要删除*(星号)而不是丢失斜线。

Backbone代码没有jQuery那么复杂。它非常易读。所以最好的事情是去编写代码而不是查找文档。我不太了解正则表达式,但是如果你看到splatParam variable,我认为它将星号视为野性匹配。如果我错了,任何人都可以纠正我。