Backbone — перезаписать историю хешрейтов

Можно ли переписать историю браузера без использования history.pushState?

У меня есть магистральное приложение с маршрутизатором, которое выглядит примерно так:

routes: {
    'posts': 'posts',
    'modal': 'modal'
},

'before': function (args) {
    //check if logged in
        //do some various other setup tasks
    //maybe delete modal routes from the history?

    //forward to route
    args.next()
},

'posts': function () {
    //make and show posts
},

'modal': function (params) {
    //edit user email preferences OR
    //create a new post OR
    //do various other crud operations
}

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

Я просмотрел исходный код магистрали и не нашел ничего, что бы просто говорило history = [].

Есть ли способ сделать это без состояния push?


person Joe Longstreet    schedule 25.02.2013    source источник


Ответы (1)


Вы пытались установить для параметра replace значение true функции router.navigate(fragment, [options])?

Предполагается, что это обновит URL-адрес без создания записи в истории браузера.

http://backbonejs.org/#Router-navigate

Если вы обрабатываете событие нажатия кнопки, оно должно обрабатываться в представлении, а не в классе маршрутизатора.

Пример:

class MyView extends Backbone.View

    events :

        'click #backButton'    :    'onClick'


    initialize : ->

           #Some Stuff


    render: ->

           #Some Stuff


    onClick: ( e ) ->

           router.navigate '/projects', {replace : true }
person socrateisabot    schedule 25.02.2013
comment
ну, я уверен, что это сработает, но разве метод навигации не вызывается только при ручном запуске маршрута? В моем приложении есть много случаев, когда я не смогу этого сделать (ссылки, которыми делятся, приходят по электронной почте или через другие приложения). - person Joe Longstreet; 26.02.2013
comment
Как мне вызвать эту функцию при нажатии кнопки «Назад»? - person Joe Longstreet; 04.03.2013
comment
Я только что обновил свой ответ, добавив пример класса и событие onclick на кнопке «#myButton». - person socrateisabot; 04.03.2013