2012-07-09 56 views
1

在我的路由器中,我指定了路由器'#'来调用索引函数。这是第一次加载应用程序。但是,在导航离开后再返回,视图不再呈现。这里是我的路由器:Backbone.js'#'route not working

CommunityApp.Routers.Main = Backbone.Router.extend({ 
    routes: { 
     '': 'index', 
     '#': 'index', 
    }, 

    initialize: function() { 
     this.communities = new CommunityApp.Collections.Communities(); 
     this.communities.fetch(); 
    }, 

    index: function() { 
     console.log('index called'); 
     view = new CommunityApp.Views.CommunitiesIndex({collection: this.communities}); 
     $('#main').html(view.render().el); 
    } 
}); 

我看到该函数被调用,因为它记录'索引调用'。然而,只有在我第一次导航到localhost:3000 /#时才会显示视图。如果我点击其他地方导致回到'#',该函数被调用,但CommunitiesIndex视图永远不会被插入到DOM中。

感谢

+0

不知道它是否能解决你的问题,但是你不在路由中使用'#'每个路由都是在'#'之后发生的,所以'#'路由映射到一个URL为http://domain.com/##'。 – jackwanders 2012-07-09 16:12:50

+0

所以默认情况下,它应该只是''? – 0xSina 2012-07-09 16:22:32

+0

是的,你的默认路由应该是'''' – jackwanders 2012-07-09 16:42:11

回答

1

我知道这是一个古老的线程,但我会加我2美分。

相应的路线是''

routes: { '' : 'index' } 

该路线只是空白。第二部分可以是任何你想要的,即'index','home','landing'

0

你想用#映射的索引页为什么,这不是一个好办法。 我建议您使用其他字符来映射索引页,如“索引”。 如果你要使用#,你的网址应该是http://xxx.com/##,所以看起来很奇怪,远远好于http://xxx.com/#index这个索引的清晰度。

编辑:

routes: { 
     '': 'index' 
    }, 

要做到这一点,这意味着,如果没有匹配的映射,它会自动匹配[“”:“指数”]那你想知道为什么只有第一跳的指数?我想第一次没有匹配任何地图,所以符合['':'index']自动跳转到索引页,未来总是有匹配的映射,不符合['':'index' ]当然不会跳转到索引页面。

+0

好吧,但是这仍然不能回答我的问题。当用户首次打开该页面时,http://xxx.com/对应的路由是什么?只是''?该显示什么?我想要显示索引。 – 0xSina 2012-07-09 16:51:15

+0

@ 0xSina嘿,请参阅我的更新。 – 2012-07-09 17:04:02