Backbone - Презаписване на хронологията на Hashchange

Възможно ли е да пренапиша хронологията на браузъра, без да използвам 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 = [].

Има ли някакъв начин да направите това без състояние на натискане?


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


Отговори (1)


Опитвали ли сте да зададете опцията за замяна на 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