Backbone.js 主干路由:是否需要修改服务器?

Backbone.js 主干路由:是否需要修改服务器?,backbone.js,routes,Backbone.js,Routes,现在,我正在主干应用程序中使用哈希路由。我想使用完整的路线,因此我会有一个URL,看起来像(在我的SPA中,leads是页面): leads/#/main contact 而不是 leads#主要联系人 我加了一行: Backbone.history.start({pushState:true,根:“/”}) 但是路线/main contact不起作用。我知道我可能需要对服务器进行一些修改。有人能告诉我这项工作需要做些什么吗?您需要让服务器端提供一个包含路由器代码的页面,而不管给定的路径如何 /

现在,我正在主干应用程序中使用哈希路由。我想使用完整的路线,因此我会有一个URL,看起来像(在我的SPA中,
leads
是页面):

leads/#/main contact

而不是

leads#主要联系人

我加了一行:

Backbone.history.start({pushState:true,根:“/”})


但是路线
/main contact
不起作用。我知道我可能需要对服务器进行一些修改。有人能告诉我这项工作需要做些什么吗?

您需要让服务器端提供一个包含路由器代码的页面,而不管给定的路径如何

/leads/*-->leads.html


我再具体不过了,因为在服务器端执行此操作的机制取决于您使用的服务器端技术。

在主干路由器中不使用/as路由的情况下尝试主联系人

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

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

  • 对于
    Backbone.Router
    您不需要做任何事情<代码>主干。历史记录
    自动删除路由中的任何前导斜杠和尾随空格;ie
    main 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>
    
    
    
    $(函数(){ var MyRouter=Backbone.Router.extend({ 路线:{ “家”:“家”, “帮助”:“帮助”, “关于”:“关于” }, home:function(){this.msg(“home”);}, help:function(){this.msg(“help”);}, about:function(){this.msg(“about”);}, msg:function(m){$(“#message”).text(m)} }); 新的MyRouter(); Backbone.history.start(); });

    注意:我只是通过从本地文件运行来测试上述示例。

    据我所知,查询的“#”符号后面的部分不会发送到服务器。这纯粹是客户端要处理的“占位符”。所以你不能有像“leads/#/某物”这样的路线