代码之家  ›  专栏  ›  技术社区  ›  Ngoral

如果从的assets或content\u调用,则会转义HTML

  •  0
  • Ngoral  · 技术社区  · 8 年前

    我刚刚遇到了一个问题,我的咖啡代码没有按预期处理。那么,下面的代码

    #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') %>")
    

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

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

    2 回复  |  直到 8 年前
        1
  •  0
  •   sjcoder    8 年前

    您应该用*更改文件结尾。js。erb或*。js。咖啡erb公司 并且能够使用rails助手

        2
  •  0
  •   Ngoral    8 年前

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