我正在构建一个多页面应用程序,并希望利用 Backbone 的路由器来初始化我的页面加载视图。我无法找到一种不使用散列来利用路由器的方法,而且我不需要或不想使用推送状态。
基本上,我想要做的就是使用路由器 URL 模式匹配来匹配 url 并根据从服务器加载的页面初始化我的视图。
也许我在想这一切都是错误的,或者也许有一种方法可以在我缺少的主干路由器中本地执行此操作。非常感谢任何建议。
我正在构建一个多页面应用程序,并希望利用 Backbone 的路由器来初始化我的页面加载视图。我无法找到一种不使用散列来利用路由器的方法,而且我不需要或不想使用推送状态。
基本上,我想要做的就是使用路由器 URL 模式匹配来匹配 url 并根据从服务器加载的页面初始化我的视图。
也许我在想这一切都是错误的,或者也许有一种方法可以在我缺少的主干路由器中本地执行此操作。非常感谢任何建议。
从骨干文档(强调我的):
Backbone.Router 提供路由客户端页面并将它们连接到操作和事件的方法。
换句话说,骨干路由器仅设计用于处理客户端 URL(散列之后的部分),而不是服务器端 URL(散列之前的部分)。可能有一种方法可以破解路由器并Backbone.History
使用完整的 URL 而不仅仅是哈希,但这并不容易,我建议不要这样做。
您可以考虑的一种替代方法是某种 onDocumentReady 逻辑,它检查页面的 URL,如果它的哈希与它的 URL 不匹配,则添加一个哈希。这样一来,如果有人访问“/foo”,您的代码会将其转换为“/foo#foo”,并且可以正常使用主干路由器。
不过,另一种选择是编写自己的“路由器”,这实际上比 Backbone 的更简单,因为它只需要在每次页面加载时工作一次。这是一个简单的例子:
var mockRouter = {
foo: function() {
// do stuff for page "foo"
},
bar: ...
}
$(function() {
mockRouter[window.location.pathname]();
});