这是我第一次使用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()
我在忙什么?
答案 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,我认为它将星号视为野性匹配。如果我错了,任何人都可以纠正我。