Я думаю, что ответ mateusmaso в основном правильный, но требует некоторых настроек, чтобы гарантировать, что вы всегда получите правильный URL-адрес, который вы ищете.
Сначала вам нужно переопределить метод route, чтобы вызвать метод beforeRoute:
route: (route, name, callback) =>
Backbone.Router.prototype.route.call(this, route, name, =>
@trigger('beforeRoute')
callback.apply(this, arguments)
)
Затем вы связываете событие и инициализируете переменную экземпляра истории:
initialize: (options) ->
@history = []
@on "beforeRoute", @storeRoute
Затем создайте вспомогательные методы для хранения и извлечения фрагмента:
storeRoute: =>
@history.push Backbone.history.fragment
previousFragment: =>
@history[@history.length-2]
НаконецВам нужен один последний вспомогательный метод, который можно использовать для изменения URL-адреса без перезагрузки и сохранения полученного фрагмента.Вы должны использовать это при закрытии всплывающего окна, иначе у вас не будет ожидаемого фрагмента в истории, если пользователь снова откроет всплывающее окно, не переходя никуда еще.Это связано с тем, что при вызове navigate без «trigger: true» обработчик события не запустит сохранение фрагмента.
changeAndStoreFragment: (fragment) =>
@navigate(fragment)
@storeRoute()