在PJAX加载后点击后退按钮时,jquery ui手风琴坏了

时间:2012-06-14 12:39:14

标签: jquery jquery-ui jquery-ui-accordion pjax

我使用PJAX(jquery-pjax)和pjax_rails来导航Rails应用程序。

在第1页,我有一个jquery ui手风琴。

当我点击一些启用了pjax的链接时,第2页内容正确地加载了pjax

当我点击后退按钮时,第1页的内容是pjax加载但手风琴然后似乎被打破了,即当我点击打开另一个标签时,打开的一个仍然打开,并调用.accordion('option','active' )在activate和beforeActivate事件处理程序中返回-1。

进一步点击已关闭的标签页将打开它们,但最初打开的标签仍然保持打开状态。

单击最初打开的标签的标题,然后单击另一个标题将最终使手风琴按预期呈现,但.accordion('option','active')仍然返回-1。

我尝试使用Firebug与处于“破碎”状态的手风琴进行交互,并且它对.accordion('destroy')没有反应。

使用.accordion('option','active',2)会触发相关事件,但UI不会更新。然后请求.accordion('option','active')然后正确返回2.

有没有人经历过类似的事情?关于如何解决这个问题的任何想法,即在pjax状态更新后按下后退按钮后有一个工作的手风琴?

谢谢!

pjax_rails:https://github.com/rails/pjax_rails jquery ui accordion:http://jqueryui.com/demos/accordion/(我正在使用1.9.0m8版本)

1 个答案:

答案 0 :(得分:0)

Pjax在导航之前克隆当前页面的HTML状态,然后对其进行缓存。当您单击它时,它会再次将该克隆拉出缓存,但此时不会重新初始化javascript。

我建议的一般规则是在$(document).on('pjax:start')期间销毁任何jquery-ui项目并在$(document).on('pjax:end')上重新初始化它们。