通过ajax渲染元素

时间:2015-02-16 02:30:26

标签: javascript jquery ruby-on-rails ajax

我有一个页面,当单击一个按钮时,我想在rails侧运行一个方法并相应地更新页面:

控制器方法:

def disallow_part_for_augment
   disallowed_part = AvailableAugmentsPart.create(part_id: params[:part_id], available_augment_id: params[:id], disallow: true)
   disallowed_part.save()

   respond_to do |format|
     format.html { redirect_to v2_parts_url }
     format.js
   end
end

Ajax方法:

$ ->
  $('#disallow-part').click (e) ->
    console.log $(this).attr("href")
    e.preventDefault()
    $.ajax
      url: $(this).attr("href")
      type: 'PUT'
      //data: 
    return

调用帮助器方法的部分是我想要更新的部分

            <td><%= au.augment.code %></td>
            <%= show_part_group_for_allowed_parts(part_group.name, @part.id, au.id) %>
            <td><%= part_group.part_category.name %></td>

辅助方法

def show_part_group_for_allowed_parts(part_group_name, part_id, available_augment_id)
    html = ""

    if AvailableAugmentsPart.is_part_disallowed(part_id, available_augment_id).exists?
      html << "<td class='status color-red'>Disallowed</td>"
    else
      html << "<td>#{part_group_name}</td>"
    end
    return raw(html)
  end

链接到触发事件:

<%= link_to('DISALLOW', "disallow_part_for_augment/#{au.id}", id: 'disallow-part', class: 'btn btn-mini btn-primary', title: 'Disallow', remote: true) %>

1 个答案:

答案 0 :(得分:0)

控制器中对format.js的调用将查找模板disallow_part_for_augment.js.erb,并将其发送到将在其中执行的浏览器。所以在那里你可以做你需要做的更新页面。

要轻松找到要更新的部分,您需要为其添加一个类或ID(例如在您的助手中):

html << "<td id='part-#{part_id}' class='status color-red'>Disallowed</td>"

所以你可以从disallow_part_for_augment.js.erb这样引用它:

$("#part-<%= @disallowed_part.part_id %>")
  .replaceWith(
    "<%= escape_javascript(show_part_group_for_allowed_parts(...)) %>");