如果从资产或content_for

时间:2017-09-05 22:56:20

标签: ruby-on-rails coffeescript escaping

我刚遇到一个问题,即我的咖啡代码没有像我预期的那样处理。那么,以下代码

#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

不生成任何内容,但在我的视图中将<%= escape_javascript(render :partial => 'pages') %>写成纯文本。不是部分的,只是使用此代码的纯文本

我想“好的,我将其移到另一个文件并将其放到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') %>")

这就是诀窍!部分最终呈现。

所以,问题是:为什么它表现如此?这是一个错误或功能,还是由渲染规则引起的后续事情?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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