使用ajax,JQuery和render:partial渲染html表

时间:2010-01-16 01:32:15

标签: jquery ruby-on-rails ajax

这是我的问题。我想创建一个具有特定标题行的表,看起来像这样

<table>
<tr class="table-header"> <th></th><th> Name </th><th> Location </th></tr>
..data..

</table>

当我想要对表行进行ajax填充时,问题就出现了。我尝试了几种选择。基本上我的应用程序知道使用#table-data这样的选择器插入数据的位置。它会更新,但会覆盖表格标题,或者将其全部插入一列,或者将其放在标题上方等。我尝试使用div <p><tr>等进行更新。它似乎永远不会成功。

我的行动如下:

def multi_search

     @profiles = Profile.find(:all) do
           first_name =~ "%#{params[:profile][:first_name]}%" if params[:profile][:first_name].present?
           last_name  =~ "%#{params[:profile][:last_name]}%" if params[:profile][:last_name].present?
           city  =~ "%#{params[:profile][:city]}%" if params[:profile][:city].present?
           state  =~ "%#{params[:profile][:state]}%" if params[:profile][:state].present?                
           type      =~  "%#{params[:profile][:type]}%"      
           paginate :page => params[:page], :per_page => params[:rows]      
           order_by "#{params[:sidx]} #{params[:sord]}"
       end

      render :partial=> "search/search_results", :collection => @profiles, :as=>:profile  
   end 

我的javascript看起来像这样:

$("#ajax_search_form").ajaxForm({target: '#provider_search_results'})

我的部分看起来像这样:

<tr>
 <td class="table_user_image"><%= image_tag profile.avatar.url(:small) %></td>
 <td class="table_user_name">
  <%= link_to_if(profile.user.role=="Provider", profile.full_name, { :controller => "profiles", :action => "show_public_provider",    :id=>profile.id}) do
       link_to(profile.full_name, { :controller => "profiles", :action => "show_public_student", :id => profile.id })
     end %></td>
 <td class="table_user_location"> <%= profile.city %>, <%= profile.state %> </td>

</tr>

无论如何,我想在进入集合之前我需要渲染一些静态文本,而我不知道该怎么做。任何帮助将不胜感激。

注意:我正在使用jrails

1 个答案:

答案 0 :(得分:1)

通过.ajaxForm()电话,您可以自行处理回复。您不必使用target选项,而是必须通过指定执行以下操作的success option with a function来处理响应:

  • 删除标题行以外的所有内容 (similar to this question$("#MyTable tr:not(.table-header)").remove()
  • 将成功的回复附加到 有问题的表。 $("#MyTable").append(response)

另一个选项是render a partial包含您的标题行,并且还会将您的原始部分呈现给您的集合。部分呈现另一部分。