1

我正在寻找可以在 Backbone 中完成的任务。这是解释。

我有像

{
    '': 'defaultRoute',
    'test': 'test',
    'testing': 'testing'
}

假设我的根 url 是' /routes '

现在当我说' router.navigate('test', {trigger: true}); ' url 更改为/routes/test

当我调用' router.navigate('testing', {trigger: true});时类似的方式 ' url 更改为/routes/testing

但是当我调用' router.navigate('', {trigger: true}); ' url 更改为/routes/

你知道我没想到最后 / 。我从来没有通过那个。它应该回到根 url 即' /routes '。

在末尾添加 / 会产生很大的不同/意义。结帐' http://googlewebmastercentral.blogspot.in/2010/04/to-slash-or-not-to-slash.html '

对此有什么解决方法(即默认路由末尾没有 / )?

4

3 回答 3

0

尝试覆盖Backbone.History.prototype.navigate.

复制默认函数并更改此行:

  var url = this.root + fragment;

到 :

  if(this.root !== '/' && fragment === ''){
    var url = this.root.replace(trailingSlash, '');
  }else{
    var url = this.root + fragment;
  }
于 2013-10-24T10:46:13.417 回答
0

第一件事:

如果您的应用程序不是从您的域的根 url / 提供服务,请务必告诉 History 根的真正位置,作为一个选项:Backbone.history.start({pushState: true, root: "/public/search/ "}) 骨干#历史

在您的情况下,它最有可能类似于root: "/routes". 您需要记住的一点是,您的网站在浏览器中被视为资源或远程文件夹,因此没有尾部斜杠的默认路由可能无法完全工作,只需将其保留为“”,因为这通常意味着“当前文件夹”。您可以尝试将您的根 url 设置为root: "/"(就像默认情况下一样)并创建一个“路由”资源作为您的默认路由,如下所示:

{
    'test':    'test',
    'testing': 'testing',
    'routes':  'defaultRoute',
    '*':       'catchAll'
}

我对您做的另一项建议(如您在上面看到的)是在最后设置您的全部 URL,以防有人输入不存在的 URL,您还可以使用它将用户重定向到您的默认值路线。

// your code above ...
defaultRoute: function() {
  // your default route code...
},

catchAll: function() {
  this.navigate('routes', {trigger: true});
}
// your code below ...

最后,由于任何原因手动弄乱了 Backbone URL,你冒着破坏整个事情的风险,如果将来 API 发生变化,如果你只是按照预期的用途进行更新应该更容易。

于 2013-10-24T12:48:28.813 回答
0

更新:-

这已在 Backbone 的最新版本中得到修复。我在论坛上问了一个问题并找到了答案。如果它可以帮助任何正在寻找相同事物的人,我将在此处添加它作为答案。

https://github.com/jashkenas/backbone/issues/2871

于 2013-12-04T10:58:26.520 回答