【问题标题】:Backbone - Overwrite Hashchange HistoryBackbone - 覆盖 Hashchange 历史记录
【发布时间】:2013-02-11 06:29:52
【问题描述】:

不使用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 = [] 的内容。

有没有什么方法可以在没有推送状态的情况下做到这一点?

【问题讨论】:

    标签: javascript backbone.js routes browser-history hashchange


    【解决方案1】:

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

    这应该会更新 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 }
    

    【讨论】:

    • 好吧,我确信这会起作用,但不是仅在手动触发路线时才调用导航方法吗?在我的应用程序中有很多实例我无法做到这一点(共享的链接,通过电子邮件或其他应用程序进入。)
    • 按下后退按钮时如何调用该函数?
    • 我刚刚通过添加类示例和“#myButton”按钮上的 onclick 事件更新了我的答案
    猜你喜欢
    • 2021-08-24
    • 1970-01-01
    • 2012-02-01
    • 2014-06-08
    • 2017-04-29
    • 1970-01-01
    • 1970-01-01
    • 2012-01-29
    • 1970-01-01
    相关资源
    最近更新 更多