0

ネストされたフォームと jQuery を使用して複数のファイルをアップロードする必要があります。そこで、link_to_function メソッドを使用してヘルパーを作成しました。

  def add_document_link(title, form)
    link_to_function title do |page|
      form.fields_for :documents, Document.new, :child_index => Time.now.to_i do |f|
        page << "$('#documents').append('#{escape_javascript(render('/realties/document', :f => f))}');"
      end
    end
  end

このコードは単純にリンクを作成し、このリンクが押されると、新しいファイル アップロードのネストされたフォームをレンダリングします。rails3 beta4 を使用している場合でも、驚くほど機能します (「link_to_function」が非推奨であることはわかっています)。

link_to_function または AJAX 呼び出しを使用せずに同じことを行うより良い方法はありますか?

前もって感謝します ;)

4

4 に答える 4

1

それが機能する場合、あとはJavaScript呼び出しを別のwhatever.js.erbファイルに移動して見栄えを良くするだけです。

whatever.js.erb:

"$('#documents')。append('<%= escape_javascript(render(' / realties / document'、:f => f))%>);"

(rubyコードをerbタグの文字列に補間する変更に注意してください)

これで、次のことができるようになります。

"whatever"}、:remote => true%>

コードははるかに簡潔になり、出力されたhtmlははるかに見栄えが良くなります。これは、JavaScriptが含まれていないためです。ドキュメントがhtml5であり、JSライブラリが含まれていることを確認してください(コードが機能するため、おそらくこれを行います:))。

私自身はPrototypeを使用していますが、JQueryでも違いはありません。私が今考えることができる唯一の弱点は、フォームブロックをパーシャルに渡すことですが、それは機能するはずであり、考えるには遅すぎます:)

それがうまくいったかどうかをここに投稿してください。うまくいかなかった場合は、それを理解します。おやすみなさい;]

于 2010-06-19T02:02:26.157 に答える
1

他の人の作品から派生した私のプロジェクトhttps://github.com/adamaig/complex-form-examplesをご覧になることをお勧めします。Rails 3でも同じ方法が機能します(テストのためにプロジェクトをローカルにアップグレードしました)。大きな問題は要素が深くネストされていることですが、このプロジェクトでは、jquery と rails で生成されたテンプレートを操作する ujs の方法を示す必要があります。

于 2010-12-19T21:08:47.323 に答える
0

これは、ネストされたフォームとUJSでの私の経験を本当に超えていますが、FormBuilderインスタンスをパーシャルに渡さないようにする別のアイデアがあります。多分それはうまくいくでしょう。私は見知らぬものが機能するのを見てきました。そのフォーム内でレンダリングし、インスタンスを直接渡さなくても到達できる可能性があるため、これは正しい場合があります。これがうまくいかない場合は、私よりも賢い人があなたの質問に答える必要があります:)

于 2010-06-19T21:27:48.190 に答える
0

申し訳ありませんが、ajax呼び出しが不要であることに気づきませんでした。ただし、ページオブジェクトを呼び出しても、その呼び出しが行われないかどうかはわかりません。ajaxなしで完全に呼び出すには、クライアント側でフィールドをキャッシュする必要があると思います。あなたの例がajax呼び出しなしで機能することを完全に確信していますか?

それが「目立たない」ようにするために私が考えることができる唯一のことは、独自のjavascriptを格納するためのapplication.jsファイルにjavascriptを抽出し、そこからビュー内から関数を呼び出すことです。これは、そのファイル(application.js)を含める場合です。これにより、コードの動作方法をまったく変更せずに、JavaScriptをビューから移動するだけです。

乾杯 :)

于 2010-06-19T09:39:49.557 に答える