2014-02-24 81 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