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 に渡します。以下のコードはおそらく間違っているので、ここを修正する必要があります。

インポート.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 %>

この Javascript.erb ファイルに Ruby パラメーターを渡す正しい構文は何ですか? また、インポートされたミッションの「タイトル」と「コンテンツ」を、新しく追加されたミッション フォーム ボックスにコピーしたいと考えています。

  <%= 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

OK、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| %>

ただし、rubyが埋め込まれたjavascriptファイルを前処理するには、railsにTELLする必要があるため、以下を変更する必要があります。

render 'folders/import.js'

render 'folders/import.js.erb'

全体的に必要なことを達成するためのよりクリーンな方法がありますが、今のところ、埋め込まれたrubyとjavascriptの組み合わせを理解する必要があると思います。

于 2012-06-05T02:16:49.500 に答える
0

スプロケットのコンパイル時に問題が発生するため、これを行うべきではないと思います。ファイルが変更されたときに初めてコンパイルされます。変数をjsに渡したい場合は、そのgemクライアント変数を試すことができます

于 2013-09-16T07:16:20.103 に答える