0

Rails アプリケーションをナビゲートするために PJAX (jquery-pjax) と pjax_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_rails : https://github.com/rails/pjax_rails jquery ui accordion : http://jqueryui.com/demos/accordion/ (1.9.0m8 バージョンを使用しています)

4

1 に答える 1

0

Pjax は、ナビゲートする前に現在のページの HTML 状態を複製し、キャッシュします。クリックして戻ると、そのクローンがキャッシュから再び引き出されますが、その時点で JavaScript が再初期化されることはありません。

私が一般的なルールとして提案したいのは、jquery-ui アイテムを破棄し、$(document).on('pjax:start')それらを再初期化すること$(document).on('pjax:end')です。

于 2012-07-09T22:58:51.663 に答える