【问题标题】:Which JavaScript hashchange/history library should I use today (2011)?我今天应该使用哪个 JavaScript hashchange/history 库(2011 年)?
【发布时间】:2011-10-14 13:35:06
【问题描述】:

1) 我的 JavaScript 应用程序应该使用哪个 JavaScript hashchange/history 库/方法?
2)我如何使用该方法实现这三件事?

A) 当页面加载时,我想解析 url 哈希/参数并设置初始应用程序状态。
具体来说,我的应用程序由具有两个模型的主干集合组成,这些模型具有 selectedCountry、selectedYear 等属性。
(我不认为我可以使用 Backbone.Router,因为这是一个非常自定义的可视化应用程序,具有复杂的状态?)

B) 我想设置一个 hashchange 监听器或类似的监听器,让我相应地更新应用状态

C) 在 Backbone Collection 更改事件中,我想更新 url。重要提示:我想在执行此操作时暂时删除 hashchange 侦听器,以便没有反馈循环。

注意: 该应用程序已经依赖于一些 HTML5 技术,因此该解决方案不必与旧版浏览器兼容......但是“反馈循环”部分很重要,因为我之前一直在努力解决这个问题......

谢谢:)

【问题讨论】:

  • 我在业余时间正在做一个。它还不能工作,但它会做你想做的所有事情(支持历史对象和 hashchange 作为后备)。如果你想关注或贡献:github.com/nathanmacinnes/Historic
  • 在这样的问题上,我总是想知道,如果人们使用散列来传递真正应该添加到查询字符串中的数据。
  • @mblase75 他们当然是......这就是为什么它有点像黑客。在哈希中这样做的原因是您不希望用户每次执行某些操作时都必须重新加载页面。
  • 哈希片段已被有效地重新用作一种客户端查询字符串,用于触发应用内的操作但不触发页面刷新/重新加载...
  • @NathanMacInnes: 啊,很酷 :) 如果它可以防止“反馈循环”并与 Backbone 一起很好地工作,那将是一个额外的好处。它与其他现有的库有什么不同?谢谢。

标签: javascript backbone.js history.js hashchange jquery-bbq


【解决方案1】:

由于您已经在使用 Backbone,我会坚持使用 Backbone 的 Router 对象。使用应用中已有的东西会更容易,而不是尝试在组合中加入新的东西。

至于您的反馈循环问题,我已经通过never firing my router methods from code 解决了这个问题。

它的要点是我让我的 JavaScript 对象控制应用程序的状态,并为我完成工作。当我调用router.navigate 时,我从不将true 作为第二个参数传递。我只调用router.navigate 以响应我的应用程序中的状态更改,以更新我的浏览器窗口中的哈希片段。事情是这样的:这纯粹是对应用程序状态发生变化的响应。我从不使用router.navigate 来更改我的应用程序的状态。

希望有帮助

【讨论】:

  • 听起来不错。这适用于我的设置吗?模型 1:年份 = 1950,国家 = SE,模式 = A。模型 2:年份=1980,国家=NO,模式=B。 STATE => #m[0][year]=1950&m[1][year]=1980 或类似的。或者它会是什么样子?谢谢 - 我会阅读博客文章! :)
  • 应该可以正常工作。骨干路由器可以像这样处理路由末尾的参数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-10
相关资源
最近更新 更多