Backbone.js косая черта после хэша в резервном режиме - история pushState - PullRequest
2 голосов
/ 11 декабря 2011

Я использую маршрутизацию Backbone.js . Он генерирует URL для браузеров, как это:

http://my-app.com/help

Для Internet Explorer (кроме IE10) и старых браузеров, не поддерживающих HTML5:

http://my-app.com/#help

Как настроить Backbone.js для создания запасных URL-адресов с дополнительной косой чертой, например, так:

http://my-app.com/#/help

Ответы [ 3 ]

6 голосов
/ 30 октября 2013

Я знаю, что это немного устарело, но поскольку принятый ответ больше не работает в более новых версиях Backbone, я решил поделиться своими выводами.

Я нашел способ заставить это работать в IE8и Chrome (не тестировал другие браузеры) - если вы используете Backbone.history для навигации.

Если вы используете две предшествующие косые черты в вызове навигации, он создаст URL-адрес так, как вы этого хотите.

Backbone.history.navigate('//help');

Я вообще не менял маршруты - они не начинаются с косой черты.Создание косой черты, казалось, сломало ее.

Я должен также отметить, что я использую Марионетку с Backbone, поскольку, возможно, это могло бы иметь значение.

Надеюсь, это кому-то поможет.

2 голосов
/ 11 декабря 2011

Я верю, что ваш второй кодовый блок полностью отличается от третьего.Предыдущий слеш задается в имени свойства.

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

отличается от:

routes: {
    "/help":                 "help",    // #/help
    "/search/:query":        "search",  // #/search/kiwis
    "/search/:query/p:page": "search"   // #/search/kiwis/p7
  }
1 голос
/ 30 марта 2012

Вот уродливый хак, чтобы обойти это: переопределить getHash () . Вот оригинальный код:

getHash: function(windowOverride) {
  var loc = windowOverride ? windowOverride.location : window.location;
  var match = loc.href.match(/#(.*)$/);
  return match ? match[1] : '';
},

Кажется, что это работает после добавления дополнительной косой черты в регулярное выражение:

Backbone.History.prototype.getHash = function(windowOverride) {
  var loc = windowOverride ? windowOverride.location : window.location;
  var match = loc.href.match(/#\/(.*)$/);
  return match ? match[1] : '';
}

Навигация может не работать после этого, но, возможно, ее можно исправить аналогичным взломом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...