2014-02-24 82 views
1

假设我做了一个ajax调用,我想从中获取一些静态模板(app/views/static/some_template.html.erb),我想在其中存储一些JavaScript app/views/layouts/sign_in.js.erb。是否有可能呈现多个文件? (因为我想保持独立的我的js文件和我的HTML文件)呈现多个文件 - rails

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');

回答

1

你可以做的是以下

在你的控制器

@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<%= escape_javascript(@template) %>

+0

好吧,它似乎工作,谢谢! – user1611830

2

你可以把渲染内局部和细分你的文件多了一个层次:

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' %> 
+0

实际上,我在我的'sign_in.js.erb'文件里放了一个'console.log(test)',但它似乎不被评估为javascript,而是作为纯文本。怎么会这样 ? – user1611830

+0

您可能需要手动添加' – user1611830