【问题标题】:rendering multiple files - rails渲染多个文件 - rails
【发布时间】:2014-02-24 14:17:39
【问题描述】:

假设我进行了一个 ajax 调用,我想从中获取一些静态模板 (app/views/static/some_template.html.erb),我想在其上使用存储在 app/views/layouts/sign_in.js.erb 中的一些 javascript。是否可以渲染多个文件? (因为我想将我的 js 文件和我的 html 文件分开)

def ajax_call
   respond_to do |format|
    ...
    format.js {render 'layouts/sign_in.js.erb'}
   end
end

编辑:这是我的控制器

    respond_to do |format|
       format.js {render 'devise/sessions/new.html.erb'}
    end

devise/sessions/new.html.erb,我放了

<div> test</div>
<%= render "layouts/sign_in.js.erb" %>

layouts/sign_in.js.erb 中,我输入了console.log('test');

【问题讨论】:

    标签: javascript ruby-on-rails ruby rendering


    【解决方案1】:

    您可以将渲染放在部分文件中,然后再将文件分段:

    def ajax_call
       respond_to do |format|
        ...
        format.js {render 'layouts/grouped_sign_in.js.erb'}
       end
    end
    
    # in _grouped_sign_in.js.erb
    <%= render 'layouts/sign_in.js.erb' %>
    <%= render 'layouts/create_account.js.erb' %>
    

    【讨论】:

    • 事实上,我在我的sign_in.js.erb 文件中放了一个console.log(test),但它似乎没有被评估为javascript,而是作为纯文本。怎么可能?
    • 它仍然不起作用我添加了&lt;%= javascript_tag do %&gt;console.log("test");&lt;% end %&gt;,我得到了&lt;script&gt; //&lt;![CDATA[ console.log("test"); //]]&gt; &lt;/script&gt;
    • 源代码是什么?请问可以粘贴一下吗?我认为有嵌套的
    • 我将模板的html 部分缩减为&lt;div&gt;test&lt;/div&gt;,但仍然遇到同样的问题...
    • 也许这与我在控制器中渲染了一些静态页面format.js {render 'static/new.html.erb'}(我放在此页面底部&lt;%= render 'layouts/sign_in.js.erb' %&gt;)的事实有关
    【解决方案2】:

    你可以做的是以下

    在你的控制器中

    @template = ActionView::Base.new('app/views/static', {}, ActionController::Base.new).render(file: 'new').to_s
    
    respond_to do |format|
        format.js {render 'layouts/sign_in.js.erb'}
    end
    

    然后将您的 @template 变量返回到您的 sign_in.js.erb&lt;%= escape_javascript(@template) %&gt;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-09
      • 2010-10-09
      • 1970-01-01
      • 2015-12-10
      相关资源
      最近更新 更多