2

FeesController の "show" アクション テンプレートで表示されるコードは次のとおりです。

<div id="payers_controls">
      <%= link_to_remote('New payer',
                               :update => "payers_controls", 
                               :url => new_payer_url) 
      %>
</div>

ここに new.rjs があります - PayersController の "new" アクションに属します

page.replace_html "payers_controls", :partial => "form", :object => @payer

これがPayersControllerの「新しい」アクションです

  def new
    @payer = Payer.new(params[:payer])
  end

PayersController の「新規」アクションの「フォーム」部分は次のとおりです。

   <%= "Damn text to see if this damn partial is rendered properly" %>

次に、「New payer」リンクをクリックすると、「payers_controls」DIV 内にプレーンな JS が表示されます。

try { Element.update("payers_controls", "Damn text to see if this damn partial is rendered properly"); } catch (e) { alert('RJS error:\n\n' + e.toString()); alert('Element.update(\"payers_controls\", \"Damn text to see if this damn partial is rendered properly\");'); throw e }

そして、なぜこのいまいましい応答が SCRIPT タグで囲まれていないのでしょうか? JS 応答のページに SCRIPT タグを含む別の非表示のプレースホルダーを作成する必要がありますか?

PS 私は AJAX on Rails の初心者なので、私の怒りを理解してください。

4

1 に答える 1

3

問題は、JS を使用してコンテンツを 2 回更新しようとしていることです。

link_to_remote タグから :update パラメータを削除するか、RJS テンプレートを削除します。

基本的に、Rails は RJS テンプレートを使用してページを一度更新し、次に link_to_remote からの :update コールバックを使用して再度更新します。両方は必要ありません。ビュー内のコードはできるだけ少なくした方がよいため、そこを削除して RJS テンプレートを保持します。

お役に立てれば。他に何かありましたら、お知らせください。

ケント

于 2010-01-11T02:26:10.183 に答える