【问题标题】:rails slim template in js responsejs响应中的rails slim模板
【发布时间】:2018-08-01 14:25:19
【问题描述】:

我使用的是slim模板,需要写一个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替换。

【问题讨论】:

    标签: ruby-on-rails slim-lang


    【解决方案1】:

    你可以像这样写一个|下的所有命令:

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

    Reference for |.

    Interpolation也可以,不需要显式添加\n,因为|下的文字是原样复制的,换行符也会被复制。但是即使没有它们,您的 javascript 也将有效,因为命令用分号分隔。

    注意这里需要双括号进行插值,否则插值输出会被html转义。

    【讨论】:

    • 10x,有没有办法避免分号?
    • @ChenKinnrot 对于这种特殊情况,你可以省略分号而不用修改上面的代码,因为|下的文本是按原样复制的,所以会有换行符。但是你为什么要避开它们呢?风格指南recommend to use them.
    • @ChenKinnrot 我在回答中添加了关于换行符的声明。
    猜你喜欢
    • 2012-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多