1

现在,我在我的 Backbone 应用程序中使用哈希路由。我想使用完整的路线,所以我会有一个看起来像这样的 URL(leads作为我的 SPA 中的页面):

leads/#/main-contact

而不是

leads#main-contact

我添加了这一行:

Backbone.history.start({pushState: true, root: "/"});

但是路线/main-contact不行。我知道我可能需要对服务器进行一些修改。有人能告诉我让这个工作涉及到什么吗?

4

4 回答 4

0

如前所述,您需要确保服务器处理针对lead/的请求,即将这些请求转发给lead.php或类似的请求。如何做到这一点通常取决于服务器软件,而不是使用的服务器端语言。例如,一个快速的谷歌搜索出现了以下链接:

  1. 使用 apache mod_rewrite 删除尾部斜杠
  2. 使用 Apache 的默认目录索引文件时,如何从 URL 中删除尾部斜杠?

因为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>

注意:我只是通过从本地文件运行上面的例子来测试它。

于 2013-02-25T19:35:29.013 回答
0

修改您的重写规则以获取文件(处理您的路由逻辑的文件)

于 2013-02-24T17:58:59.037 回答
0

无论给出的路径如何,您都希望让您的服务器端提供一个包含您的路由器代码的页面。

/leads/* --->leads.html

我不能比这更具体,因为在服务器端执行此操作的机制特定于您使用的服务器端技术。

于 2013-02-09T01:41:47.447 回答
0

在骨干路由器中尝试不使用 / 作为路由的 main-contact

于 2013-02-20T21:47:01.107 回答