我正在尝试允许用户将已保存的任务“导入”到教学大纲帖子中。教学大纲有许多任务,教学大纲形式是一个嵌套形式,用户可以在其中添加“添加任务”,这将添加一个新的任务文本框。
当我“导入”任务时,我想要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。下面的代码可能是错误的,这是我需要帮助修复它的地方。
IMPORT.JS.ERB
//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)" %>
如何将其复制到这些文本框的值中,以便用户在导入后进行编辑?
我意识到这个问题组织严密,但我试图尽可能简单地解释整个背景。我还是初学者,所以请理解..
答案 0 :(得分:1)
好的,IMPORT.JS.ERB是javascript,将被发送回您的浏览器,但由于.ERB扩展名,它将被嵌入式ruby首先处理,在控制器的上下文中,然后发送到浏览器,所以你可以使用标准的ERB语法,
<%= @something %>
你的javascript中的任何地方都可以操纵发回的javascript,所以你可以这样做:
import.js.erb:
$('#somediv').html('<%= escape_javascript(@missions_hash.inspect) %>');
如果你的页面上有一个div ='someday'的div,那么它的内容应设置为mission_hash的转储。这也假设你正在使用AJAX,即:
<%= form_tag(import_missions_path,
:method => :post,
:id => "import-js" ,
:remote=>true) do |f| %>
但是,您需要TELL rails来预处理带有嵌入式ruby的javascript文件,因此您必须更改:
render 'folders/import.js'
到
render 'folders/import.js.erb'
有更简洁的方法来完成你想要的整体,但我认为你现在只需要想象我们的嵌入式ruby和javascript组合。
答案 1 :(得分:0)
我认为你不应该这样做,因为你会在sprocket编译时遇到问题。它将在文件更改时第一次编译。如果你想将变量传递给js,你可以尝试那个gem client variable