2012-01-18 3 views
1

Я использую Fancybox и Zend. Надеюсь, что следующее ясно.Обновить страницу из iframe

На www.example.com/template/edit/id/3 У меня есть вкладки пользовательского интерфейса jQuery. Они доступны непосредственно через анкеры. Например. www.example.com/template/edit/id/3#tabs-2

На # вкладках-2 У меня есть некоторые элементы, неважно, что это такое. Вы можете создавать или редактировать их. Эти элементы получили собственный контроллер, поэтому для их редактирования вы вызываете/elements/edit/id/44. В настоящее время я делаю это в слое с Fancybox. Для этого я использую функциональность iframe для Fancybox.

Итак, если вы находитесь в/template/edit и вы нажимаете кнопку редактирования элемента, открывается слой, включающий iframe, который загружает/элементы/редактирует.

Итак, если вы сейчас измените элемент и нажмите «Сохранить», я хочу, чтобы слой автоматически закрывался и перезагружался.

Fancybox предоставляет возможность указать, что он должен делать, когда он закрывается. На данный момент я получил его так:

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

Это фактически перезагружает верхнее окно, а не фрейм. Кроме того, есть возможность закрыть Fancybox через JS. Я делаю, что, установив переменную View, который вызывает это, например:

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

Таким образом, если экономия была успешно я поставил $ this-> view-> близко = истина и слой получает clsoed который вызывает мой JS.

Это прекрасно работает. Моя проблема теперь заключается в том, чтобы перезагрузить с помощью # tabs-2 в моем URL-адресе.

Конечно, я мог бы получить URL-адреса, очистить их от других якорей, которые пользователь набрал и т. Д., И построить мой URL-адрес, который я установил в расположение окна, но как-то я думаю, должно быть более простое решение.

E.g. установив URL-адрес браузера на # tabs-2 без перезагрузки, но это также звучит не очень приятно. Перезагрузка проста, но наличие якоря довольно сложно.

+0

ли вы попробовать 'window.location.href = window.location.href'? – Mottie

+0

Это будет то же самое, что и reload(). Перезагрузка работает, но если вы находитесь на второй вкладке, отредактируйте что-нибудь, сохраните ее, вы хотите остаться на второй вкладке после перезагрузки и не вернуться к первому. По умолчанию первая привязка не привязана по умолчанию. – 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

. Он связывает меня с элементом/edit/id/2 # tabs-2 вместо шаблона. Я не понимаю почему. Оповещение href в onClosed дает мне правильный путь, но если вы сделаете href = tabs2, тогда он переходит к элементу. Также window.top ничего не меняет. – xotix

Смежные вопросы