0

我试图允许用户将保存的任务“导入”到教学大纲帖子中。教学大纲有许多任务,教学大纲表单是一个嵌套表单,用户可以在其中“添加任务”,这将附加一个新的任务文本框。

当我“导入”任务时,我希望 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)" %>

我如何将它复制到这些文本框的值中,以便用户在导入后可以编辑它?

我意识到这个问题组织得很糟糕,但我试图在不解释整个背景的情况下让它尽可能简单。我还是初学者,请谅解。。

4

2 回答 2

1

好的,IMPORT.JS.ERB 是将被发送回浏览器的 javascript,但是由于 .ERB 扩展名,它会在控制器的上下文中首先由嵌入式 ruby​​ 处理,然后再发送到浏览器,所以您可以使用标准 ERB 语法,

 <%= @something %>  

在你的 javascript 中的任何地方来操作被发回的 javascript,所以你可以这样做:

导入.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 组合。

于 2012-06-05T02:16:49.500 回答
0

我认为你不应该这样做,因为你会在 sprocket 编译时遇到问题。文件更改时会在第一时间编译。如果您想将变量传递给 js,您可以尝试使用 gem客户端变量

于 2013-09-16T07:16:20.103 回答