Javascript, Rails просмотры, content_for и DRYness - PullRequest
2 голосов
/ 10 мая 2011

В Rails общая идиома для Javascript для конкретной страницы:

(макет)

<head>
  <% yield :javascript %>
</head>

(вид)

<% content_for :javascript do %>
  <script type="text/javascript">
    $().whatever;
  </script>
<% end %>

Я ненавижу повторять теги сценария. Есть ли какая-то причина, почему следующее - плохая идея?

(макет)

<head>
  <script type="text/javascript">
    <% yield :javascript %>
  </script>
</head>

(вид)

<% content_for :javascript do %>
    $().whatever;
<% end %>

Ответы [ 3 ]

7 голосов
/ 10 мая 2011

Я согласен, что это именно то, что наиболее характерно для вашего варианта использования. Как правило, когда я использую <% yield: javascript%>, его целью является добавление библиотек для конкретных страниц, что будет ограничением предложенного вами подхода. Если вы хотите поддержать оба, я сделал следующее:

(макет)

<head>
  <% yield :javascript_libraries %>
  <script type="text/javascript">
    <% yield :javascript %>
  </script>
</head>

(вид)

<% content_for :javascript do %>
    $().whatever;
<% end %>
<% content_for :javascript_library do %>
    <%= javascript_include_tag 'page-specific.js' %>
<% end %>

Конечно, большинство людей размещают библиотеки javascript внизу для оптимизации загрузки страниц, поэтому вы можете просто переместить их в свой макет.

2 голосов
/ 10 мая 2011

Идиомы прекрасны и все, но самое важное - это производительность труда вас и ваших команд и умение поддерживать дела, если с вами все в порядке, я тоже не вижу никаких проблем с этим. Тем не менее, я уже делал это раньше, а также видел, как это делается в проектах, хотя сейчас я обычно помещаю это в файл сценария, если мне абсолютно не нужно, чтобы оно было на конкретной странице.

1 голос
/ 10 мая 2011

Если вы хотите упростить ваши представления, я настоятельно рекомендую HAML (и это SASS для CSS). Есть небольшая кривая обучения, и вы, возможно, не захотите конвертировать все ваши существующие представления сразу, но я сомневаюсь, что вы когда-нибудь захотите вернуться к безобразному беспорядку ERB.

В HAML это будет выглядеть так:

= content_for :head do
  :javascript
    $().whatever;
...