[英]Passing in Params to JS.ERB file from controller? [Rails 3]
我正在嘗試允許用戶將保存的任務“導入”到課程提要中。 教學大綱包含許多任務,教學大綱表單是嵌套的表單,用戶可以在其中“添加任務”,該表單將附加新的任務文本框。
當我“導入”任務時,我希望javascript
1.點擊“添加任務”鏈接(添加一個嵌套表格)
2.將“導入的任務”的值輸入到ckeditor文本框中。
_IMPORT_FORM.HTML.ERB
<%= form_tag(import_missions_path, :method => :post, :id => "import-js" ) do |f| %>
<ul>
<% current_user.folders.find_by_order(1).missions.each do |mission| %>
<li> <%= check_box_tag "mission_ids[]", mission.id %>
<%= mission.id.to_s + ". " + mission.title %> </li>
<% end %>
</ul>
<%= submit_tag "Import ", :class => 'btn btn-primary' %>
<% end %>
然后轉到SYLLABUSES#IMPORT
def import
@missions_hash = []
#loop through each mission id from :missions_id
params[:mission_ids].each do |id|
@missions_hash << Mission.find(id)
end
respond_to do |format|
format.html { redirect_to edit_syllabus_path(@syllabus), notice: "imported" }
format.js { render 'folders/import.js' }
end
end
然后我要呈現IMPORT.JS.ERB文件,並傳遞@missions_hash。 下面的代碼可能是錯誤的,這是我需要幫助修復它的地方。
導入器
//loop for each mission passed in
<% @mission_hash.each do |mission| %>
//click add missions
$('#add-missions-button').trigger('click');
//pass in mission.title & mission.content to form textbox value
<% end %>
將Ruby參數傳遞到此Javascript.erb文件中的正確語法是什么? 另外,我想將導入的任務的“標題”和“內容”復制到新添加的任務表單框中:
<%= f.text_field :title, :class =>'row span6' %>
<%= f.cktext_area :content, :toolbar => 'MyToolbar', :class => 'row span6', :rows => '5', :placeholder => "What is the first step a learner should do? (e.g. Watch an intro video, read certain article)" %>
如何將其復制到這些文本框的值中,以便用戶在導入后進行編輯?
我意識到這個問題組織得不好,但是我試圖在不解釋整個背景的情況下使其盡可能簡單。 我仍然是初學者,所以請理解。
好的,IMPORT.JS.ERB是將發送回瀏覽器的javascript,但是由於擴展名為.ERB,因此在發送給瀏覽器之前,它將首先在控制器的上下文中由嵌入式ruby處理,因此您可以使用標准ERB語法,
<%= @something %>
您可以在JavaScript中的任何位置操作發送回的javascript,因此您可以執行以下操作:
import.js.erb:
$('#somediv').html('<%= escape_javascript(@missions_hash.inspect) %>');
如果您的頁面上有一個id為“ someday”的div,則應將其內容設置為missions_hash的轉儲。 這也假設您正在使用AJAX,即:
<%= form_tag(import_missions_path,
:method => :post,
:id => "import-js" ,
:remote=>true) do |f| %>
但是,您需要告訴Rails來使用嵌入式ruby對javascript文件進行預處理,因此您必須進行以下更改:
render 'folders/import.js'
至
render 'folders/import.js.erb'
有一些更簡潔的方法可以完成您想要的總體工作,但是我想您現在只需要弄清楚我們嵌入的ruby和javascript組合。
我認為您不應該這樣做,因為鏈輪編譯時會遇到問題。 文件更改時,它將在第一次編譯。 如果要將變量傳遞給js,可以嘗試使用gem 客戶變量
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.