【问题标题】:Backbone.history.navigate(url,{trigger:true, replace: true})Backbone.history.navigate(url,{trigger:true, replace: true})
【发布时间】:2014-01-11 10:54:33
【问题描述】:

我使用这种方法导航到 url,触发事件,而不是将 url 推送到浏览器历史记录。但是Backbone.history.navigate(url,{trigger:true, replace: true}) 替换历史记录中的先前网址。 示例:浏览器历史记录

之前

localhost:port/url

Backbone.history.navigate(url + '/list',{ trigger:true, replace: true })

预期:在路由 url + '/list' 和浏览器历史记录 localhost:port/url 上触发事件 实际上:触发事件但浏览器历史记录localhost:port/#url/list。 之前的网址被替换了

【问题讨论】:

  • 问题是网址中的# 吗?这个问题不是很清楚。
  • 似乎下面的答案应该被接受为正确答案,请注意您似乎误解了replace的含义---它替换了history中的条目(地址栏总是在导航时发生变化)......但导航并不是更新应用程序的唯一方法!

标签: javascript url backbone.js browser-history


【解决方案1】:

这就是我认为您要问的问题,如果我错了,请纠正我:

“如何在不更新 URL 的情况下触发 Backbone 中的路由?”

快速回答

你不能。 replace 选项也无济于事。这是来自文档的 sn-p:

要更新 URL 而不在浏览器的历史记录中创建条目,请将替换选项设置为 true。

如您所见,replace 不会影响 URL 的更新。

后续回答

如果您不希望更新 URL,这让我认为在您的应用程序中显示列表不是对您的应用程序状态的重大更新。如果这是真的,那么根据我的经验,您不应该使用 Backbone.history 对象来管理它。

如果您直接(例如,通过函数)或间接(例如,通过调度事件)调用此功能,那么您的应用会更新,而您的 URL 不会。

我喜欢Derick Baily's Post 了解如何设置您的路由器结构。有点长,但值得一读。

另外,请查看 David Sulc's repo 的“木偶简介”。我知道它正在使用 Marionette.AppRouter 对象,但主体仍然健全。以Check out this file 为例。

附带说明,如果# 是问题所在; check out this SO answer。不过要小心,hashChange 选项主要是为了与 x 浏览器兼容 according to the docs

【讨论】:

    猜你喜欢
    • 2015-05-09
    • 2017-01-14
    • 2017-10-08
    • 1970-01-01
    • 2021-04-20
    • 1970-01-01
    • 2015-11-15
    • 2018-09-28
    • 1970-01-01
    相关资源
    最近更新 更多