簡體   English   中英

從控制器傳遞參數到JS.ERB文件? [路軌3]

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM