现在,我在我的 Backbone 应用程序中使用哈希路由。我想使用完整的路线,所以我会有一个看起来像这样的 URL(leads
作为我的 SPA 中的页面):
leads/#/main-contact
而不是
leads#main-contact
我添加了这一行:
Backbone.history.start({pushState: true, root: "/"});
但是路线/main-contact
不行。我知道我可能需要对服务器进行一些修改。有人能告诉我让这个工作涉及到什么吗?
现在,我在我的 Backbone 应用程序中使用哈希路由。我想使用完整的路线,所以我会有一个看起来像这样的 URL(leads
作为我的 SPA 中的页面):
leads/#/main-contact
而不是
leads#main-contact
我添加了这一行:
Backbone.history.start({pushState: true, root: "/"});
但是路线/main-contact
不行。我知道我可能需要对服务器进行一些修改。有人能告诉我让这个工作涉及到什么吗?
如前所述,您需要确保服务器处理针对lead/
的请求,即将这些请求转发给lead.php
或类似的请求。如何做到这一点通常取决于服务器软件,而不是使用的服务器端语言。例如,一个快速的谷歌搜索出现了以下链接:
因为Backbone.Router
你不需要做任何事情。Backbone.history
自动从路由中删除任何前导斜杠和尾随空格;iemain-contact
将同时匹配#main-contact
和#/main-contact
。这是一个简短的例子:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<ul>
<li><a href="#/home">Home</a></li>
<li><a href="#/help">Help</a></li>
<li><a href="#/about">About</a></li>
</ul>
<div id="message"></div>
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script src="https://raw.github.com/documentcloud/underscore/master/underscore.js"></script>
<script src="https://raw.github.com/documentcloud/backbone/master/backbone.js"></script>
<script type="text/javascript">
$(function () {
var MyRouter = Backbone.Router.extend({
routes: {
"home": "home",
"help": "help",
"about": "about"
},
home: function () { this.msg("home"); },
help: function () { this.msg("help"); },
about: function () {this.msg("about"); },
msg: function(m) { $("#message").text(m); }
});
new MyRouter();
Backbone.history.start();
});
</script>
</body>
</html>
注意:我只是通过从本地文件运行上面的例子来测试它。
修改您的重写规则以获取文件(处理您的路由逻辑的文件)
无论给出的路径如何,您都希望让您的服务器端提供一个包含您的路由器代码的页面。
/leads/* --->leads.html
我不能比这更具体,因为在服务器端执行此操作的机制特定于您使用的服务器端技术。
在骨干路由器中尝试不使用 / 作为路由的 main-contact