【问题标题】:HTML is escaped if called from assets or content_for如果从 assets 或 content_for 调用,HTML 会被转义
【发布时间】:2017-09-12 02:30:25
【问题描述】:

我刚刚遇到了一个问题,即我的咖啡代码未按预期处理。所以,下面的代码

#app/views/smth/edit.slim
- content_for :js_scripts
  coffee:
    $ ->
      $("#destination-id").html("<%= escape_javascript(render :partial => 'pages') %>")

.smth-page
  #some slim-html-code here

什么也没产生,但在我看来,&lt;%= escape_javascript(render :partial =&gt; 'pages') %&gt; 写成纯文本。不是部分,只是带有此代码的纯文本

我想“好吧,我把它移到另一个文件,然后放到app/assets/javascript。”而且,有一些逻辑,所以这样做更漂亮。好的,我移动了它,像这样:

#app/assets/javascripts/vid/smth.coffee
class Vid.Smth
  constructor: =>
    $("#destination-id").html("<%= escape_javascript(render :partial => 'pages') %>")

#app/views/smth/edit.slim
- content_for :js_scripts
  coffee:
    $ ->
      new Vid.Smth()

但没有任何改变。

谷歌搜索显示了很多没有答案和建议的问题,例如

  • 用双引号替换单引号,反之亦然;
  • escape_javascript 替换为j
  • 使用raw;
  • 在文件名中使用.js.erb.js.coffee.erb

等等。没有任何帮助。

然后我记得做了同样的事情并让它发挥作用。经过几个小时的调查、复制和粘贴后,我最终将这段代码放到了部分代码中并从视图中呈现出来:

# app/views/smth/edit.slim
...
= render :partial 'test'

#app/views/smth/_test.coffee
$("#destination-id").html("<%= escape_javascript(render :partial => 'pages') %>")

这就成功了!部分最终渲染。

所以,问题是:为什么它会这样?这是一个 bug 还是一个特性,或者是渲染规则的结果?

【问题讨论】:

  • 您的问题不清楚。试着用代码总结一下你之前在做什么,现在在做什么。
  • @ArslanAli 我添加了 smth。希望这会有所帮助,因为我不太确定,你是什么意思:任何东西都在描述(在我看来是这样 :))

标签: ruby-on-rails coffeescript escaping


【解决方案1】:

您不能在以 *.js 结尾的文件中使用 ruby​​ 脚本是纯 javascript。 您应该使用 *.js.erb 或 *.js.coffee.erb 更改文件结尾 并且将能够使用rails helpers

【讨论】:

  • 我不使用 .js。是写在这儿吗?
  • 正如您在我的问题中看到的那样,不,我不需要这个。将相同的字符串放在具有 .coffee 扩展名的文件中就可以了。我也有一些逻辑,当我将.erb 添加到文件名时它无法运行。我看到了所有这些建议,但它们都不起作用。
【解决方案2】:

我意识到,我在那里做错了,所以我唯一需要的是javascript_tag 来包装我想要渲染的 JS 代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-30
    • 1970-01-01
    • 1970-01-01
    • 2013-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多