Rails 3.1. Наличие iframe позволяет остановить рендеринг макета. - PullRequest
4 голосов
/ 11 сентября 2011

Итак, у меня есть базовый файл макета:

<!DOCTYPE html>
<html dir="ltr" lang="en-US">
<head>
  <%= stylesheet_link_tag    "logged_out" %>
  <%= javascript_include_tag "application" %>
  <%= stylesheet_link_tag "http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/themes/ui-lightness/jquery-ui.css" %>
</head>
<body>
  <!-- header stuff here -->
  <%= yield %>
  <!-- footer stuff here -->
</body>
</html>

И с любым нормальным html все в порядке. Однако, если я добавлю в iframe, как это для представления:

<iframe id="form" height="480" width="320" src="/mobile_preview/preview"/>

Когда я отрисовываю страницу, все рендерится до iframe, но нижний колонтитул после yield не рендерится. Кто-нибудь сталкивался с этим раньше?

РЕДАКТИРОВАТЬ: Как один из ответов указал (спасибо!), Мое заявление о доходности в моем первоначальном вопросе было неверным. Мой оператор yield в моем коде верен, но при передаче в stackoverflow это была опечатка.

ПРИМЕЧАНИЕ. Если вы пытаетесь реплицировать iframe, используется jquery mobile.

Ответы [ 2 ]

14 голосов
/ 16 сентября 2011

Проблема в том, как вы включаете <iframe>. Вы думаете, что включили самозакрывающийся тег, и он заканчивается там. Но вы не отправляете свою страницу в виде XML, и HTML не имеет концепции самозакрывающихся тегов, это просто мусор в конце. Итак, ваш:

<iframe id="form" height="480" width="320" src="/mobile_preview/preview"/>

действительно интерпретируется как:

<iframe id="form" height="480" width="320" src="/mobile_preview/preview">

, а остальная часть страницы интерпретируется как игнорируемое содержимое внутри тега <iframe>. Вот почему вы не должны использовать самозакрывающиеся теги в HTML-документе - они не работают так, как вы думаете.

Измените его на:

<iframe id="form" height="480" width="320" src="/mobile_preview/preview"></iframe>

Вы можете найти его, если посмотрите на разобранное дерево DOM с помощью Firebug или Chrome Inspector.

В качестве бонуса: он не имеет ничего общего с Rails, сервер возвращает ответ, как и раньше, вы можете увидеть его в журналах. Вопрос в том, как ваша разметка интерпретируется браузерами.

2 голосов
/ 11 сентября 2011

Вы неправильно указали кодовое место в рубине

<%= yield =>

Правильное значение

<%= yield %>
...