骨干路由不起作用

时间:2013-11-30 13:07:01

标签: javascript backbone.js

我正在创建一个简单的Backbone应用,路由无效。这是我的路由器。

define(function(require) {
  'use strict';

  var Backbone = require('backbone');
  var Header = require('views/header.view');
  var MainBody = require('views/main.body.view');

  var Router = Backbone.Router.extend({
    routes: {
      "": "main",
      "about/": "about"
    },

    main: function() {
      var header = new Header();
      $('#header').html(header.render());

      var body = new MainBody();
      $('#app').html(body.render());
    },

    about: function() {
      console.log("About");
    }
  });

  return Router;
});

我按预期点击/路线,但当我转到/about时,它从未点击about功能。我应该在某个地方的网址中有哈希吗?还有什么可能会导致这个问题?

2 个答案:

答案 0 :(得分:0)

这是因为路线是明确匹配的,因此"about/": "about"将匹配/about/"about": "about"将匹配/about

有一种方法可以匹配/about/about/,并且需要使用可选的匹配器(matcher),因此您的路由哈希键将如下所示

"about(/)": "about"

要使无哈希路由起作用,您需要运行Backbone.history.start({pushState: true})

答案 1 :(得分:0)

根据backbonejs文档,应按如下方式定义和解决路由器:

var Workspace = Backbone.Router.extend({

  routes: {
    "help":                 "help",    // #help
    "search/:query":        "search",  // #search/kiwis
    "search/:query/p:page": "search"   // #search/kiwis/p7
  },

  help: function() {
    ...
  },

  search: function(query, page) {
    ...
  }

});

因此,当您键入http://<URL>/backbonepage#help时,将调用帮助功能