2012-03-06 100 views
6

我想我缺少一些关于骨干路由功能的基础知识。骨干JS路由不能正常工作

我建立一个应用程序,它看起来像这样:

file: app.js

App = {} 
App.nav = new Backbone.Router; 
require('app/controller'); 

file: controller.js

App.nav.route('home', 'home', function() { 
    console.log("Home Activated"); 
}); 

App.navigate('home'); 

此时浏览器更改URL在地址栏/home但没有任何反应,我没有得到Home Activated控制台消息。

我试过使用我自己的路由类(即Backbone.Router.extend({})),但我没有真正看到它的一个点,因为我仍然需要初始化它,我想在我的应用程序中使用中央历史记录/导航所有模块/控制器添加路由到它,而不是为每个控制器创建一个路由器。

我在做什么错?

回答

15

http://documentcloud.github.com/backbone/#Router-navigate

从文档:

如果你想又拨打了路由功能,设置触发选项设置为true。

但是正如OlliM写道,您需要先激活历史!

所以你的答案应该是:

Backbone.history.start(); 
App.nav.navigate('home', {trigger: true}); 

编辑: 忘了“导航”

+1

'{触发:真正}'这里不是解决方案的一部分。骨干将默认触发:如果没有指定选项,则为true。下面是代码片段: 'navigate:function(fragment,options){if(!History.started)return false; if(!options || options === true)options = {trigger:!! options};' – Kinergy 2014-09-12 07:03:11

+0

您的链接404'd。 – NuclearPeon 2016-04-01 19:33:07

1

我只是想指出这一点,因为它救了我的伤害和心痛的世界。

如果您路由到一个自定义页面等

Backbone.router.navigate('/some/page'); // does not work 

,它似乎无法正常工作。添加一个尾随“/”

Backbone.router.navigate('/some/page/'); // works 

这花了我的故障排除了几个小时......