使用Backbone.js路由器没有哈希

时间:2013-05-07 12:46:24

标签: backbone.js backbone-routing

我正在构建一个多页面应用程序,并希望利用Backbone的路由器初始化我的页面加载视图。我没有找到一种方法来利用路由器而不使用哈希,我不需要或不想使用推送状态。

基本上,我希望能够做的就是使用Routers URL模式匹配来匹配url并初始化我的视图,具体取决于从服务器加载的页面。

也许我正在考虑这一切都错了,或者可能有一种方法可以在我缺少的Backbone路由器中本地执行此操作。非常感谢任何建议。

1 个答案:

答案 0 :(得分:0)

从Backbone文档(强调我的):

  

Backbone.Router提供了路由客户端页面并将它们连接到操作和事件的方法。

换句话说,Backbone Router只设计用于处理客户端URL(散列后的部分),而不是服务器端的(散列之前的部分)。可能有办法破解路由器并Backbone.History使用完整的URL而不仅仅是哈希,但这并不容易,我建议不要使用它。

您可以考虑的另一种选择是某种onDocumentReady逻辑,用于检查页面的URL,如果它的散列与其URL不匹配,则添加散列。这将使得如果有人访问“/ foo”,您的代码会将其转换为“/ foo #foo”,并且可以正常使用Backbone路由器。

另一种选择只是编写自己的“路由器”,这实际上比Backbone更简单,因为它只需要每页加载一次。这是一个简单的例子:

var mockRouter = {
    foo: function() {
        // do stuff for page "foo"
    },
    bar: ...
}
$(function() {
    mockRouter[window.location.pathname]();
});