【问题标题】:Backbone Router : Get rid of # in the URL骨干路由器:去掉 URL 中的 #
【发布时间】:2014-03-21 23:27:52
【问题描述】:

我正在让主干路由器工作

App.Router = Backbone.Router.extend({
      routes: {
        "todo": "todo"
      },
      todo: function() {
        alert(1);
      }
});
Backbone.history.start();

当我转到 url 时效果很好:domain:port/#/todo

我希望它在 URL 中不带 # 的情况下工作,我尝试按照文档中的说明放置 pushState 参数。

    Backbone.history.start({pushState: true});

这只是将 # url 重定向到非散列的一个

domain:port/#/todo(重定向到 ==>)domain:port/todo

但是当我直接访问这个网址时

域:端口/待办事项

它不起作用:“无法获取 /todo”。

有什么办法,我可以让这个网址在没有#的情况下工作吗?

【问题讨论】:

    标签: javascript node.js backbone.js express


    【解决方案1】:

    您需要编写服务器端代码来传递 URL 的页面。

    使用pushState 只是告诉浏览器“我已经使用 JS 更改了页面的内容,因此它与你请求此 URL 时得到的内容相匹配”。

    它不会导致内容与该 URL 匹配,您必须将其作为单独的任务来执行。

    【讨论】:

    • 昆汀是绝对正确的。这是使用 PushState 的一系列教程。不过,警告的话。如果您只是在玩 ToDo 应用程序,那么我假设您是 Backbone 新手。这是相当高级的东西。 lostechies.com/derickbailey/2011/09/26/…, lostechies.com/derickbailey/2011/09/26/…, lostechies.com/derickbailey/2011/10/06/….
    • @sublime — 不,当“您使用 JS 更改页面内容”时您会收到警报,如果 URL 是,您还没有编写提供相同结果的服务器端代码直接访问。
    • 这将是一个单页应用程序,所以我真的很困惑服务器应该提供什么内容?
    • 它应该以默认状态加载应用程序的状态交付应用程序,然后执行导致您将 URL 更改为从服务器请求的 URL 的操作。
    • 这就是我所做的,我改变了 :: app.get('/', send html file );为此 :: app.get('*',send html file);但是现在在发送这个 html 文件时,我收到一条错误消息: Uncaught SyntaxError: Unexpected token
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-11
    • 1970-01-01
    • 2014-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多