0

私のフォームはこのようになります

index.html.erb

<div id="comments_p">
  <%= render (:partial => "comment", :collection => tasks.comments) %>
</div>   
<% form_for :comment, :url => comment_task_path(tasks.id), :html => {:remote => true, :class => "comment_form"} do |f| -%>
  <%= f.text_field :remark, :placeholder => "Add Comments", :rows => 2, 
    :style => "width: 834px; height: 40px;"%>
  <%= f.submit "submit"%>
<% end -%>

<script type="text/javascript">
  jQuery.fn.submitWithAjax = function() {
    this.submit(function() {
      var test = $.post(this.action, $(this).serialize(), null, "script");
      $(".comment_form")[0].reset();
      alert("Comment Submitted");
      return false
    })
    return this;
  };
</script>

application.js

jQuery.ajaxSetup({ 
  'beforeSend': function(xhr) {xhr.setRequestHeader("Accept", "text/javascript")}
})

$(document).ready(function() {
  $(".comment_form").submitWithAjax();
})

私の問題は、どうすればdivを更新できるかということです。アラートは機能しますが、divcomments_pを更新する方法が見つからないようです

4

1 に答える 1

0

Tasks controllerのメソッドを作成するためにフォームが送信されることを願っています。リクエストはバックエンドのjsリクエストであるため、目立たない Javascript Railscastsで説明されているように、/app/views/tasks/ フォルダーにcreate.js.erbというファイルを作成し、実行したいコードを記述します。成功した応答の後。

tasks_controller.rb で更新されたタスク変数を取得します

def create
    #...code for creating the comments for the task
    @tasks = ... #updated record with the latest comments
end

次に、 create.js.erbファイルの応答コードは次のようになります。

$("#comments_p").html('<%= render_partial :comment, :collection => @tasks.comments) %>');

上記のコードによるリクエストが正常に完了すると、comments_p div が更新されます。

于 2013-03-19T07:29:37.897 に答える