Backbone - 覆盖Hashchange历史记录

时间:2013-02-25 23:16:15

标签: javascript backbone.js routes browser-history 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 = []的内容。

如果没有推送状态,有没有办法做到这一点?

1 个答案:

答案 0 :(得分:0)

您是否尝试将router.navigate(fragment,[options])函数的replace选项设置为true?

这应该更新URL而不在浏览器的历史记录中创建条目

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

如果您正在处理Button click事件,那么应该在视图中处理,而不是在路由器类中处理。

例如:

class MyView extends Backbone.View

    events :

        'click #backButton'    :    'onClick'


    initialize : ->

           #Some Stuff


    render: ->

           #Some Stuff


    onClick: ( e ) ->

           router.navigate '/projects', {replace : true }