2015-08-11 3 views
1

Это мой application.html:Каков наилучший способ встраивания небольшого фрагмента javascript в Rails?

<body> 
    <div class="bg-cover"> 
    <div class="background"> 
     <%= render 'layouts/header' %> 
     <main> 
     <% flash.each do |message_type, message| %> 
      <div class="alert alert-<%= message_type %>"> 
      <script>Materialize.toast("<%= message %>", 5000, 'rounded <%= message_type %>', 'success')();</script> 
      </div> 
     <% end %> 
     <%= yield %> 
     </main><!--End of main--> 
     <%= render 'layouts/footer' %> 
    </div><!-- end of container main--> 
    </div> 
</body> 
</html> 

Я не знаю, если вложение этого скрипта непосредственно в application.html наилучшая практика. Может ли кто-нибудь посоветовать, какой должна быть лучшая практика? Благодаря!!

ответ

0

На самом деле это плохая практика Чтобы сделать это, вы должны пойти на ненавязчивую практику javascript вместо этого (http://blog.teamtreehouse.com/unobtrusive-javascript-important) любой код javascript написан в файле Javascript, который не находится внутри представления.

Для достижения этой цели в вашем случае вы можете добавить DIV с определенным классом упаковывает есть сообщение, пройти любой параметр, который вам нужен в вашем JavaScript через data атрибуты

<div class="show-material-message" data-message="<%= message %>"></div> 

Затем в JavaScript application.js, например, слушать для этого DIV и огонь Materialize.toast когда вы хотите

$(document).ready(function() { 
    $(".show-material-message").each(function(){ 
    Materialize.toast($(this).data('message'), 5000.... 
    }); 
}); 
+0

Вау ... Я действительно об этом не думал. Я просто знал, что есть что-то не так, просто вставляя скрипты. Спасибо Bigsolom. – Cent

2

Вы можете сделать это таким образом, но я бы поставил его в частично:

layouts/_flash_message.html.erb

<% flash.each do |message_type, message| %> 
    <div class="alert alert-<%= message_type %>"> 
    <script>Materialize.toast("<%= message %>", 5000, 'rounded <%= message_type %>', 'success')();</script> 
    </div> 

и включить его так:

<body> 
    <div class="bg-cover"> 
    <div class="background"> 
     <%= render 'layouts/header' %> 
     <main> 
     <%= render "layouts/flash_message" %> 
     <% end %> 
     <%= yield %> 
     </main><!--End of main--> 
     <%= render 'layouts/footer' %> 
    </div><!-- end of container main--> 
    </div> 
</body> 
</html> 
+1

о ... Я думаю, я мог бы сделать это, тоже. Я читал некоторые статьи, и все делали упор на использование конвейера ресурсов rails вместо непосредственного встраивания скриптов. Вот почему мне было интересно, если это все еще профессионально. Но спасибо. Я бы продолжил и сразу создал частичку. – Cent

+0

Да, для большинства вещей вы должны. Но это один лайнер для вспышек, поэтому не обязательно использовать звездочки, но вы можете создать '_flash.js' и включить его в' application.js' –

+1

Ага, это была моя проблема. Так как его просто линия, конечно, меня простят, если я просто вложу. Спасибо, Чейз, за ​​ваше время. – Cent

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