Включая встроенный JavaScript с помощью content_for в направляющих

Я использую content_for и урожай для введения файлов JavaScript в нижнюю часть моего расположения, но задаюсь вопросом, что лучшая практика для включения встроенного JavaScript. Конкретно я задаюсь вопросом где помещенный описание типа сценария:

<% content_for :javascript do %> 
  <script type="text/javascript"> ... </script>
<% end %>

или

<% content_for :javascript do %> ... <% end %>
  <script type="text/javascript">
    <%= yield :javascript %>
  </script>
<% end %>

Я использую первую опцию теперь и задаюсь вопросом, плохо ли это для включения нескольких

...

объявления в рамках одного представления. Иногда у меня есть partials тот вывод к этому.

18
задан TenJack 17 March 2010 в 17:54
поделиться

1 ответ

Я предпочитаю, чтобы yield макета выглядел так:

<html>
  <!-- other stuff -->
  <body>
   <!-- other stuff  -->
   <%= yield :javascript %>
  </body>
</html>

Тогда в представлении можно написать:

<% content_for :javascript do %>
  <script type='text/javascript'>
    function doMagic() {
      //Mind-blowing awesome code here
    }
  </script>

<% end %>

<!-- More view Code -->

<%= render :partial => "sub_view_with_javascript" %>

И в частичном _sub_view_with_javascript.html.erb тоже можно написать:

<% content_for :javascript do %>
  <script type='test/javascript'>
     function DoMoreMaths() {
       return 3+3;
     }
   </script>
<% end %>

Я обосновываю этот подход тем, что yield и content_for находятся в разных файлах. Вставлять тег script в каждый content_for не DRY но это позволяет подсветке синтаксиса распознать изменение языка в каждом файле и помогает мне в этом.

Если у вас несколько вызовов content_for в одном файле к одному и тому же символу (в нашем случае :javascript), я бы подумал о том, чтобы объединить их все в один верхний, но он идеально подходит для использования с партициями.

И HTML совершенно счастлив иметь столько блоков сценариев, сколько вы захотите. Единственная возможная загвоздка - при работе с кодом в инструментах разработчика, таких как firebug, требуется немного больше времени, чтобы найти нужный блок сценария для вашей функции. Это происходит только тогда, когда мне нужно установить точку останова javascript для отладки.

31
ответ дан 30 November 2019 в 07:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: