我在我的rails应用程序中使用了will_paginate,但是我遇到了一种情况,我需要在一个块内使用will_paginate,当我单击分页号时页面不应该重新加载,谁能帮我说如何将will_paginate与ajax集成以避免页面重新加载......?
问问题
1521 次
2 回答
2
我有一个分页 javascript 文件
所以在我的 index.html.erb 文件中我添加了
<%=javascript_include_tag "pagination.js"%>
在 pagination.js 文件中
$(function(){
$(".pagination a").live("click", function() {
$.get(this.href, null, null, "script");
return false;
});
});
我在索引操作中获取了这样的模型数据。
@employees = Employee.where("!is_deleted=?",1).paginate(:page=>params[:page] ,:per_page => 20)
并将其添加到 index.js.erb 文件中
$("#employee_table").html("<%= escape_javascript(render("employees")) %>");
这里employee_table 是显示数据的div 的id。
我在 config/initializers 中有一个文件名 will_paginate_array_fix.rb。
这个文件看起来像这样
require 'will_paginate/array'
这就是为什么即使我使用它工作的地方,因为它也支持数组。
于 2012-10-31T06:26:34.980 回答
1
以下是我的设置方式:
假设我有一个Item
模型。
首先在索引视图中,我渲染了执行分页的部分:
<div id="list">
<%= render 'items/paginate_list', :items => @items %>
</div>
在部分中,我在我的will_paginate
声明中添加了一个 css 类:
items/_paginate_list.html.erb
<%= will_paginate items, :param_name => :page, :class => 'my_pagination' %>
# code displaying each item...
然后在 application.js 中,我捕获了单击my_pagination
类链接的事件:
$(document).ready(function(){
$('.my_pagination a').live("click",function(){
$('.my_pagination').html('Page is loading, please wait...');
$.get(this.href, null, null, 'script');
return false;
});
});
这样通过$.get
语句在ajax中对控制器进行调用。分页栏显示页面正在加载的消息。
在控制器中,我只有通常的:
class ItemsController < ApplicationController
def index
@items=Item.paginate(:page => params[:page], :per_page => 10)
end
end
最后,在嵌入的 js 中,我用分页来重新加载部分:
items/index.js.erb
$("#list").html("<%= escape_javascript(render 'items/paginate_list', :items => @items) %>");
希望这有帮助。
实际上,它大致是对railscast的快速总结;-)
于 2012-10-29T14:39:24.443 回答