2012-01-18 4 views
1

私はFancyboxとZendを使用しています。次のことが明らかであることを願っています。リロードページからiframeを

www.example.com/template/edit/id/3 jQuery UIタブがあります。彼らはアンカーを介して直接到達することができます。例えば。 www.example.com/template/edit/id/3#tabs-2

On#tabs-2私はいくつかの要素を持っていますが、正確には関係ありません。それらを作成または編集することができます。この要素は独自のコントローラを持っているので、それらを編集するには/ elements/edit/id/44を呼び出します。現在、私はファンシーボックス付きレイヤーでそれをやっています。私はFancyboxのIframe機能を使っています。

したがって、/ template/editで要素の編集ボタンをクリックすると、/ elements/editを読み込むiframeを含むレイヤーが開きます。

ここで要素を変更して保存をクリックすると、レイヤーが自動的に閉じて再読み込みされます。

Fancyboxは、閉じたときに何をすべきかを指定するオプションを提供します。現時点では私はそのようなそれを得た:

'onClosed'   : function() {window.location.reload();} 

これは実際にトップウィンドウではなくIFRAMEをリロードします。また、JS経由でFancyboxを終了する可能性もあります。私は、例えば、これをトリガーするビューの変数を設定することであることやってる:保存が成功した場合

<?php if($this->close): ?> 
    <script type="text/javascript"> 
    parent.$.fancybox.close(); 
    </script> 
<?php endif ?> 

だから、私は設定します$ this->表示 - >近い=真とトリガーclsoedます層の私JS。

これは問題なく動作します。私の問題は今、私のURLに#tabs-2を持つことでリロードを行うことです。

もちろん、私はURLを得ることができ、他のアンカーからそれを掃除して、ユーザーが私のタイプなどに入れて、ウィンドウの場所に設定した私のURLを構築しますが、どういうわけか、簡単な解決策が必要です。

など。ブラウザのURLをリロードすることなく#tabs-2に設定しますが、これはあまりうまくありません。再読み込みは簡単ですが、アンカーは非常に難しいです。

+0

あなたは 'window.location.href = window.location.href'を試してみましたか? – Mottie

+0

これはreload()と同じです。リロードは実際には機能しますが、2番目のタブにある場合は、何かを編集して保存し、リロード後に2番目のタブに残り、最初に戻ってはなりません。デフォルトでは最初のタブはアンカーではありません。 – xotix

答えて

1
window.location.href = "#tabs-2" 

多分:

<script type="text/javascript"> 
    parent.$.fancybox.close(); 
    window.location.href = "#tabs-2" //Add the anchor, won't stack. Will replace existing anchor 
    window.location.reload() //Refresh the screen, maintain anchor 
</script> 
+0

行のいくつかの要素を編集すると、../id/2#tabs-2#tabs-2#tabs-2で終わります。おそらく、windows.location.hrefに#tabs-2または1が含まれているかどうかをチェックして、それに応じて処理する必要があります。 – xotix

+0

これをそのまま置いてください。余分な特別なロジックは必要ありません。とにかくスタックするべきではありません。 –

+0

とにかく。テンプレートの代わりに私をelement/edit/id/2#tabs-2にリンクしています。私は本当に理由を知りません。 onClosedでhrefに警告すると正しいパスが得られますが、href = tabs2にすると要素に移動します。また、window.topは何も変更しません。 – xotix

関連する問題