0

我正在将 html.erb 转换为 html.haml。我在 erb 中有一些 jquery,它是..

:javascript
  $(".level").live("click", function() {
    //..some code
    <% if @milestone %>
      milestone = "&milestone=<%= @milestone%>";
    <% end %>
    //..some code
  });

我想将 if 语句转换为 haml,为此我正在做..

- if @milestone
  milestone = '&milestone="#{@milestone}"'

但这不起作用,并在“if @milestone”上给我一个语法错误

我究竟做错了什么?你不能混合jquery和haml吗?

4

1 回答 1

1

过滤器(或任何过滤器)内部的:javascript代码不被视为 Haml,因此您不能使用- if .... 但是,您可以使用带有#{...}内部过滤器的插值。在您的情况下,您可以执行以下操作:

:javascript
  $(".level").live("click", function() {
    //..some code
    #{"milestone = \"&milestone=#{@milestone};\"" if @milestone}
    //..some code
  });

这对于嵌套的插值部分有点笨拙,因此您可能希望将其移动到辅助方法中,例如:

def add_milestone(milestone)
  if milestone
    "milestone = \"&milestone=#{milestone}\";"
  else
    ""
end

然后你的 Haml 看起来像

:javascript
  $(".level").live("click", function() {
    //..some code
    #{add_milestone(@milestone)}
    //..some code
  });
于 2013-05-06T23:24:31.007 回答