6

私が計画している機能は、選択タグから選択した番号に応じて、いくつかのフォーム要素を挿入することです。

number_of_passengersというselectタグがあり、選択した番号に新しい乗客フィールドを動的に追加する予定です。number_of_passengersから2を選択すると、2つのフォームがフィールドセットに表示されます。これらのフォームには、名前、年齢、体重などが含まれています。

私はこれに従ってみました:

jqueryからrails関数を呼び出しますか?

それをhaml-speakに変換しただけですが、:javascriptタグを使用するとエラーが発生します。また、JavaScriptタグに入ると、「エスケープ」できないと思います。

:javascript
  $('#number_of_passengers').change(function() {
    var $num_of_passengers = $(this).val();
    for($i=0; $i<$num_of_passengers;$i++) {
      $('.passenger-info ul').append('<%= escape_javascript( render :partial => "new_passenger", :locals => {:booking => @booking }) %>');
    }
  })

また、私はform_forにいるので、@ booking変数をローカルに渡すにはどうすればよいですか?それは本当に複雑なようで、私は20回(最大20人の乗客)をループするだけで汚い方法を実行し、選択した数に応じてそれらを非表示/表示することを計画しています。でもそれは汚すぎると思いませんか?

4

3 に答える 3

12

補間を機能させるには、次のようなことを行う必要があります

!= "$('.passenger-info ul').append('#{escape_javascript( render :partial => 'new_passenger', :locals => {:booking => @booking })}');

簡単に言うと、行の先頭にを追加し、!=二重引用符で囲む文字列を含めます。

についてのあなたの質問@booking:私はあなたがあなたのためにそれをより明確にするためにいくつかのネストされたフォームの例を調査することを提案します(例えばこれこのrailscast)。

于 2010-08-17T09:16:26.437 に答える
3

私は実際にこれを追加することによってこれを行うことができました:

respond_to do |format|
  format.js { render :partial => "new_passenger" }
end

そのため、リクエストがjsであったとしても、htmlパーシャルを返します。ニフティ

于 2011-01-25T08:11:03.597 に答える
0

Railsの構文は常に変更されますが、これはすべきではありません

render :partial => "new_passenger", :locals {:booking => @booking })

なれ

render :partial => "new_passenger", :locals => {:booking => @booking })

rubyタグを評価しているため、javascriptブロック内でjavascriptをエスケープできます。

どのエラーメッセージを受信して​​いますか?

あなたの質問の後半部分は私にはわかりませんが、これはあなたが探しているものです:

- form_for @user do |f|
  # f.object is equal to @user
于 2010-08-05T16:33:27.157 に答える