这是我目前的代码:
:javascript
// do something
- if current_user.role? :client
:javascript
//do something else
因为我重复了:javascript haml过滤器,所以显然不是很干净。我想避免这种情况,但我不知道如何在HAML:javascript块中正确编写Ruby“if”语句。
我知道如何使用#{}插入变量,但是如何对整个if / for / etc执行相同操作。语句?
答案 0 :(得分:3)
我这样做:
if(#{params[:param_to_check_for].blank? ? "true" : "false"})
在上述情况下,条件是
params[:param_to_check_for].blank?
。
它将JavaScript呈现为:if(false)
或if(true)
答案 1 :(得分:2)
我没试过,但我认为你可以做到
:javascript
// do something
- if current_user.role? :client
="//do something else"
(如第二个例子here。)
对于一小段javascript,您也可以尝试
:javascript
// do something
#{current_user.role? :client ? "//do something else" : ""}
答案 2 :(得分:0)
我已将Ruby / HAML变量插入显式JS true
或false
以获取JS条件,如下所示:
$("#cancel").click( function() {
if (#{ !!my_flag_variable })
window.location.href = "./";
else
$("#dialog").hide();
} );
答案 3 :(得分:-1)
我已经通过布局中的= yield :foot_scripts
调用完成了此操作,然后:
= if condition
- content_for :foot_scripts do
- render :partial => "page_specific_javascript"
在我的视图中 - 通过这种方式,我可以确保Javascript完全执行到我希望它在DOM中的位置(在其他所有内容之后),并将其保存在一个单独的文件中,这个文件非常清晰。从您的视图文件中获取脚本? GOOD!
答案 4 :(得分:-3)
这是非常正确的。
另一个选择是你可以将它放在.js.erb
部分中并从你的haml视图中呈现它。
然后你可以做
// do something
<% if condition == true %>
// do something else
<% end %>