我已经使用了rails将paginate 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;
})
从ajax我调用索引控制器。控制进入控制器内部,但重新加载没有发生。
控制器代码:
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
请帮帮我。
谢谢, 拉姆亚。
答案 0 :(得分:1)
好的,基本上是:XHR请求 - >控制器 - >行动 - >渲染视图作为返回值。
您需要致电您的控制器。这就是你已经做的。
其次,控制器检索的数据应该用于更新当前页面。为此,我会将您的respond_to扩展为:
respond_to do |format|
format.js
end
表示JS请求将呈现index.js。{erb,rjs,...}处理程序。在此,您编写代码以更新视图。渲染的输出是您将在javascript中作为返回值接收的内容。
最后,您需要评估回复。
提示:您正在通过javascript调用索引操作。你应该用GET而不是POST来做这件事。
答案 1 :(得分: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();
});