тонкий шаблон rails в ответе js

Я использую тонкие шаблоны, и мне нужно написать ответ в формате js, когда я попытался

javascript:
  alert('x');

код не запустился, я думаю, потому что он был заключен в тег <script>.

Я поймал себя на том, что пишу это

| alert('x');

Это работает, но если мне нужно добавить еще одну команду, мне нужно написать

| alert...
= "\n"
| anotherCommand

Есть ли лучший способ писать такие вещи с тонкими шаблонами? Мой фактический код выглядит очень плохо (вот он)

| UIkit.notification("booked");
= "\n"
| $("#total").html("
= escape_javascript(render "total")
|");

= "\n"
| $("#total_#{@id}").html("
= escape_javascript(render "total", order:@order)
|");

Это всего лишь 3 строки js с заменой html.


person Chen Kinnrot    schedule 21.02.2018    source источник


Ответы (1)


Вы можете просто написать все команды под одним | вот так:

|
  UIkit.notification("booked");
  $("#total").html("#{{escape_javascript(render 'total')}}");
  $("#total_#{@id}").html("#{{escape_javascript(render 'total', order: @order)}}");

Справочник по |.

Интерполяция также будет работать, и вам не нужно явно добавлять \n, потому что текст под | копируется как есть, а также будут скопированы разрывы строк. Но ваш javascript будет валидным и без них, потому что команды разделяются точкой с запятой.

Обратите внимание, что здесь вам нужны двойные фигурные скобки для интерполяции, потому что в противном случае вывод интерполяции будет экранирован html.

person Maksim Kalmykov    schedule 23.02.2018
comment
10x, есть ли способ избежать точки с запятой? - person Chen Kinnrot; 25.02.2018
comment
@ChenKinnrot В этом конкретном случае вы можете опустить точку с запятой без изменения приведенного выше кода, потому что текст под | копируется как есть, поэтому будут разрывы строк. Но почему вы хотите их избежать? Руководства по стилю рекомендуют их использовать. - person Maksim Kalmykov; 25.02.2018
comment
@ChenKinnrot Я добавил в свой ответ заявление о разрывах строк. - person Maksim Kalmykov; 25.02.2018