2012-01-12 62 views
0

我已经使用的rails会分页gem分页。我有一个下拉,它允许用户选择每页的项目数。我希望我的分页能够在每页显示很多项目。每页显示的项目将与分页

为此,我从查看文件中调用jquery,并在select标签上进行更改操作。

查看代码:

%table.treeTable 
%tbody 
    - Ic.make_tree(@ics).values.each do |root| 
     %tr{:id => root.tree_id, :class => "root"} 
     %td= root.root_name 
     - if show_check_boxes 
      %td= check_box_tag "ic_glob", root.tree_id, false, :class => "ic_parent" 
     - root.suites.each do |suite| 
     %tr{:id => suite.tree_id, :class => "child-of-#{root.tree_id}"} 
      %td= suite.suite_name 
      - if show_check_boxes 
      %td= check_box_tag "ic_glob", suite.tree_id, false, :class => "ic_parent" 
     - suite.children.each do |case_item| 
      %tr{:id => case_item.tree_id, :class => "child-of-#{suite.tree_id}"} 
      %td= case_item.case_name 
      - if show_check_boxes 
       %td= check_box_tag "ic_glob", case_item.tree_id, false, :class => "ic_parent" 
      - case_item.children.each do |ic| 
      %tr{:id => ic.id, :class => "child-of-#{case_item.tree_id}"} 
       %td= link_to ic.name, edit_ic_path(ic.id) 
       - if show_check_boxes 
       %td= check_box_tag "ic_ids[]", ic.id, false 
    =will_paginate @ics 

Ajax代码:

$('.ics_per_page').live('change',function(){ 
$.ajaxSetup({beforeSend: function(xhr) {xhr.setRequestHeader("X-CSRF-Token", $("meta[name='csrf-token']").attr("content")); }}); 
    value1=($(this).val()); 
    $.post('/ics/index', {ics_per_page:value1}); 
    return false; 
    }) 

从阿贾克斯我打电话索引控制器。控制器进入控制器内部,但重新加载没有发生。

控制器代码:

def index 
    ics_per_page=params[:ics_per_page]||5 
    ics_per_page=ics_per_page.to_i 
    @ics = Ic.search(params[:root_name],params[:suite_name],params[:case_name],params[:name],'f').paginate(:per_page =>ics_per_page, :page => params[:all_ics]) 
    respond_to do |format| 
     puts "inside index" 
     format.html # index.html.erb 
     format.xml { render :xml => @ics } 
    end 
    end 

请帮我在这里。

谢谢, Ramya。

+1

不知道,但我看不出有任何的respond_to format.js。您正在发送AJAX请求,但没有使用响应来操作页面 – pduersteler 2012-01-12 12:07:52

+0

您好我不知道如何实现this.so代码/示例帮助将不胜感激 – ramya 2012-01-12 12:12:05

回答

1

好的,所以基本上:XHR请求 - >控制器 - >动作 - >呈现视图作为返回值。

你需要打电话给你的控制器。这是你已经做的。

其次,控制器检索到的数据应该用于更新当前页面。对于这一点,我会延长你的respond_to:

就是说JS请求将渲染index.js {ERB,RJS,...}处理程序。在这里,你编写你的代码来更新视图。呈现的输出是您将在JavaScript中作为返回值接收的内容。

最后,您需要评估响应。

提示:您正在通过javascript调用您的索引操作。你应该用GET而不用POST来做到这一点。

+0

非常感谢。我会尝试这样做。请让我知道,如果我的.js.erb看起来像这样。 $('#ics_per_page')。html(“<%= escape_javascript(render:partial =>'_listing')%>”)。假设我在partial_listing.html.haml中拥有视图代码。请让我知道是否有任何其他修改 – ramya 2012-01-12 13:12:40

+0

请让我知道,如果我的.js.erb看起来像这样。 $('#ics_per_page')。html(“<%= escape_javascript(render:partial =>'_listing')%>”)。假设我在partial_listing.html.haml中拥有视图代码。请让我知道是否有任何其他修改 – ramya 2012-01-13 10:15:27

+0

ramya这可能是正确的,是的。现在你需要评估它。例如$('#container')。replace([来自XHR调用的返回值])。 – pduersteler 2012-01-13 11:20:29

1

Ajax请求不会重新加载页面。在页面中有一个不可见的表单,并在后台更改值。

在页面中有一个不可见的表单。

<form action="/ics" method="get" style="display:none" id="change_number_of_ics"> 
    <input type="hidden" name="ics_per_page" id="num_of_items" value="" /> 
</form> 

写一个jQuery回调像

$('.ics_per_page').live('change',function(){ 
    value1= $(this).val(); 
    $("#num_of_items").attr("value", value1); 
    $("form#change_number_of_ics").submit(); 
}); 
+0

非常感谢Anand。 – ramya 2012-01-12 13:12:52

+0

您好,在chnaging下拉表单提交的值不是呼吁索引操作 – ramya 2012-01-13 11:33:23

+0

结帐表单的操作属性。您可能必须根据您的申请路线更改该值。可能只是它的'/ ics'而不是'/ ics/index'。 – Anand 2012-01-15 03:14:25