Как вернуть чистый Javascript из помощника вида rails3? - PullRequest
0 голосов
/ 20 мая 2010

Использование Rails 3: В моем файле update.js.erb я обнаружил, что повторяю много вещей. Поэтому я попытался все это сделать в качестве помощника. Но у меня проблемы с тем, чтобы заставить помощника вернуть чистый javascript. Он вставляет \" везде вместо "

Вот с чего я начал:

<% if @list.show_today %>
    $("#show_today_check_<%= @list.id %>").removeClass("gray").addClass("orange").attr("value","0");
<% else %>
    $("#show_today_check_<%= @list.id %>").removeClass("orange").addClass("gray").attr("value","1");
<% end %>   

<% if @list.show_inventory %>
    $("#show_inventory_check_<%= @list.id %>").removeClass("gray").addClass("white").attr("value","0");
<% else %>
    $("#show_inventory_check_<%= @list.id %>").removeClass("white").addClass("gray").attr("value","1");
<% end %>

etc.

Вот помощник, который я написал для создания вышеуказанного javascript:

def toggelButtonState( object, name, color)

    if object.send(name)
      @add_col = color
      @rem_col = 'gray'
      @value = "0"
    else
      @add_col = 'gray'
      @rem_col = color
      @value = "1"
    end

    js = '$("#'
    js += "#{name}_check_#{@list.id}"
    js += '").removeClass("'
    js +=  @rem_col
    js += '").addClass("'
    js +=  @add_col
    js += '").attr("value","'
    js += @value
    js += '");'

end

Я звоню с:

<%= toggelButtonState( @list , 'show_today', 'orange' ) %>

А вот что я получил в ответе:

 $(\&quot;#show_today_check_2\&quot;).removeClass(\&quot;orange\&quot;).addClass(\&quot;gray\&quot;).attr(\&quot;value\&quot;,\&quot;1\&quot;);

Теперь я заметил похожую проблему с прямым HTML в помощниках. Это не позволило бы мне вернуть вещи в угловых скобках. Но потом я узнал о content_tag. Есть ли что-то подобное для javascript? Как я могу избавиться от \&quot; с?

1 Ответ

2 голосов
/ 13 сентября 2010

Добавить

js.html_safe

как последняя строка функции toggelButtonState

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...