Interpolate ruby if statement в блоке javascript haml
Это код, который у меня есть:
:javascript
// do something
- if current_user.role? :client
:javascript
//do something else
Это явно не очень чисто, так как я повторяю: javascript haml filter. Я бы хотел этого избежать, но я не знаю, как правильно написать инструкцию Ruby "if" внутри блока HAML: javascript.
Я знаю, как интерполировать переменные С# {}, но как вы делаете то же самое для целых if/for/etc. заявления?
Ответы
Ответ 1
Я не пробовал, но я думаю, что вы могли бы сделать
:javascript
// do something
- if current_user.role? :client
="//do something else"
(Как во втором примере здесь.)
Для очень короткого фрагмента javascript вы также можете попробовать
:javascript
// do something
#{current_user.role? :client ? "//do something else" : ""}
Ответ 2
Я делаю это:
if(#{params[:param_to_check_for].blank? ? "true" : "false"})
В приведенном выше случае условие
params[:param_to_check_for].blank?
.
Он отображает JavaScript как: if(false)
или if(true)
Ответ 3
Я интерполировал переменную Ruby/HAML в явный JS true
или false
для условия JS следующим образом:
$("#cancel").click( function() {
if (#{ !!my_flag_variable })
window.location.href = "./";
else
$("#dialog").hide();
} );
Ответ 4
Я выполнил это с помощью вызова = yield :foot_scripts
в моем макете, а затем:
= if condition
- content_for :foot_scripts do
- render :partial => "page_specific_javascript"
в моих представлениях - таким образом я могу обеспечить, чтобы Javascript выполнялся именно там, где я хочу, чтобы он находился в DOM (ПОСЛЕ всего остального) и поддерживал его в отдельном файле, который намного чище. Извлеките script из ваших файлов просмотра? ХОРОШО!
Ответ 5
Это очень правильно.
Другой вариант - вы можете поместить его в части .js.erb
и сделать рендеринг из представления haml.
Тогда вы можете просто сделать
// do something
<% if condition == true %>
// do something else
<% end %>