在Backbone.js中获取URL片段而不是散列

时间:2012-11-17 09:41:48

标签: javascript backbone.js url-routing router

我在这方面已经挣扎了很长时间。我正在使用Backbone.js和Require.js。我试图告诉Backbone根据当前的URL(不是哈希)显示特定的视图。我的代码如下所示:

define(['jquery','underscore','backbone', 'views/manage_pages'], function($, _, Backbone,  ManagePages) {
  var AppRouter = Backbone.Router.extend({
    routes:{
      '/new_page': "showPageForm",
      '/edit_page': "showPageEditForm",
      '*actions': "showPageForm"
    },
  });
  var initialize = function(){
    appRouter = new AppRouter;
    appRouter.on("route:showPageForm", function(){
      console.log('hej');
    });
    appRouter.on("route:showPageEditForm", function(){
      console.log('ho');
    });
    var page_form = new ManagePages();
      Backbone.history.start();
    }
    return {
      initialize: initialize
    }
  });

所以基本上当用户转到http://example.com/new_page时,它应该记录<code>hej</code>,当他转到http://example.com/editpage时,它应该记录<code>ho</code>。我不知道如何实现这一点,即使有可能。任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:8)

您可以使用Backbone对HTML5 push-state的支持,默认情况下使用URL路径(而不是散列片段)。只需在调用history.start时将其指定为选项:

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

(请注意,如果您的应用程序位于域下的子路径中,那么您可以告诉Backbone将其用作根目录 - Backbone.history.start({pushState: true, root: "/myapproot/"}) - 尽管看起来这不是您的关注点情况)。