jquery 分页控件(二)
上一章主要是关于分页控件的原理,代码也没有重构。在这一章会附上小插件的下载链接,插件主要就是重构逻辑部分,具体可以下载源文件看下,源代码也有注释。为了测试这个插件是能用的,我弄了个简单的asp.net例子(vs 2010)。通过ajax根据每一页请求数据,数据是使用json格式进行传输,通过knockout.js绑定。在这里顺便推荐一下汤姆大叔的Knockout应用开发指南 ,是学习Knockout非常好的文章。
效果图:

主要思路是通过分页控件的callback方法把 当前页 和 每页显示数量 传给pageselectCallback方法,pageselectCallback请求后台的getModel方法获取当前页的数据,然后数据通过knockout提供的方法把数据绑定到Html控件上。
一、定义请求数据方法
[WebMethod]
public static string getModel(string index, string pagesize)
{
int pageIndex = Int32.Parse(index);
int pageSize = Int32.Parse(pagesize);
Models models = new Models();
IList<Model> allModels = models.getModels();//获取全部数据
if (pageIndex > )
{
pageIndex = pageIndex * pageSize;
}
if (pageSize > (allModels.Count - - pageIndex))
{
pageSize = allModels.Count - - pageIndex;
}
var pageSysmenus = allModels.Skip(pageIndex).Take(pageSize).ToList<Model>();//根据页数和每页显示数量获取数据
string thedata = JsonHelper.ObjDivertToJson(pageSysmenus);//把数据转成json格式 return thedata;
}
//获取总数
[WebMethod]
public static int getCounts()
{
Models models = new Models();
IList<Model> allModels = models.getModels();
int count = allModels.Count - ;
return count;
}
二、knockout 绑定数据
<table class="mytable" border="1" cellspacing="0">
<thead style="background-color: #0AA403">
<tr>
<th>
Id
</th>
<th>
Name
</th>
<th>
TrueName
</th>
<th>
Sex
</th>
<th>
</th>
</tr>
</thead>
<tbody id="tChangeClor" data-bind="foreach: models">
<tr>
<td>
<span data-bind="text: Id"></span>
</td>
<td>
<span data-bind="text: Name"></span>
</td>
<td>
<span data-bind="text: TrueName"></span>
</td>
<td>
<span data-bind="text: Sex"></span>
</td>
<td>
<span data-bind="text: Email"></span>
</td>
</tr>
</tbody>
</table>
<table>
<tr>
<td id="Pagination" class="pagination">
</td>
</tr>
</table>
data-bind绑定的字段要与后台model的字段一致,当然knockout不单只是这个功能,还有数据验证等功能,很好用的一个插件。
三、ajax 请求数据
//定义knockout的viewmodel
var viewModel = function () {
var self = this;
self.models = ko.observableArray();
}
var vm = new viewModel();
//分页控件的callback方法,通过当前页和显示页数请求数据
var pageselectCallback = function (page_index, pagesize) {
var mydata = "{'index':" + page_index + ",'pagesize':" + pagesize + "}";//post到getPage.aspx/getModel的参数
$.ajax({
type: "post",
url: "getPage.aspx/getModel",
data: mydata,
contentType: "application/json;charset=utf-8",
dataType: "json",
success: function (data) {
var datas = data.d;
mappingData(datas);
},
error: function (Request) {
alert(Request.responseText);
}
});
};
var mappingData = function (data) {
var mydata = ko.mapping.fromJSON(data);
vm.models = ko.mapping.fromJS(mydata, {}, vm.models);//把json格式转换成object格式,赋值给models
$('.mytable tbody tr:even').addClass('odd');
};
$(function () {
var getCounts;
$.ajax({
type: "post",
url: "getPage.aspx/getCounts",
contentType: "application/json;charset=utf-8",
dataType: "json",
success: function (data) {
var datas = data.d;
getCounts = Math.ceil(datas / 2);//总页数,向上取整
//调用分页控件插件
$("#Pagination").pagination({
pageSize: 2,
current_page: 1,
display_num: 10,
edge_num: 3,
counts_num:getCounts,
callback: pageselectCallback
});
},
error: function (Request) {
alert(Request.responseText);
}
});
ko.applyBindings(vm, document.getElementById('tChangeClor'));
});
关于ko.mapping.fromJSON(data)还是ko.mapping.fromJS(data)的判断,如果data是string类型( data ='{"Id":1,"Name":"WinKi"}' )就用fromJSON,如果data是object类型( data = {Id:1,Name:"WinKi"} ) 就用fromJS。如果使用$.getJSON()获取数据可以把JSON格式转换成object格式。
这个只是测试例子,实际项目中获取数据部分可以根据存储过程来获取数据,或者把全部的数据先存到缓存中。这样就不会像我例子那样每次都要先查找所有的数据。
如果您觉得还不错,点个推荐吧。
转载请注明出处!谢谢!
jquery 分页控件(二)的更多相关文章
- jquery 分页控件2
jquery 分页控件(二) 上一章主要是关于分页控件的原理,代码也没有重构.在这一章会附上小插件的下载链接,插件主要就是重构逻辑部分,具体可以下载源文件看下,源代码也有注释.为了测试这个插件是能用的 ...
- jquery 分页控件1
jquery 分页控件(一) 以前一直都是用别人的分页控件,虽然用得很爽,但总觉的还是自己写个小插件比较好,这个插件效果.代码等都有参照别人完成的控件.即便功能并不是那么完善,扩展性也不好,bug或许 ...
- jquery 分页控件(一)
以前一直都是用别人的分页控件,虽然用得很爽,但总觉的还是自己写个小插件比较好,这个插件效果.代码等都有参照别人完成的控件.即便功能并不是那么完善,扩展性也不好,bug或许还很多.个人觉得,适合自己用就 ...
- 自己写的简单的jQuery分页控件
因为是内部项目,需要分页控件,网上找了一大堆,给领导一看,都说不行,原因很简单,太复杂,领导就想要个简单点的,类似百度的分页,可是自己也没写过Jquery控件,硬着头皮找了些资料,写了这个分页控件,目 ...
- WPF 自定义分页控件二
一:添加自定义分页控件,命名为KDataPagerTwo: public class KDataPagerTwo : Control, INotifyPropertyChanged { static ...
- jquery 分页控件功能
<script> //分页 function getPageNum(num) { $("#PageNum ul" ...
- jQuery.page 分页控件
分享一下自己在项目中引用的Jquery分页控件 index.html内容 <!DOCTYPE html> <html lang="zh-cn" xmlns=&qu ...
- ajax 分页控件,基于jquery
/* 分页插件,依赖jQuery库 version: 1.1.0 author: Harrison Cao release date: 2013-09-23 相对 v1.0版本 修正了分页居中 使用方 ...
- jQuery Pagination Plugin ajax分页控件
<html> <body> <div id="datagrid"> </div> <div id="paginati ...
随机推荐
- 九度OJ1172--哈夫曼树
哈夫曼树,第一行输入一个数n,表示叶结点的个数.需要用这些叶结点生成哈夫曼树,根据哈夫曼树的概念,这些结点有权值,即weight,题目需要输出所有结点的值与权值的乘积之和. 输入: 输入有多组数据.每 ...
- Mysql忘记密码,重新设置
1. 停止mysql 服务 2. 增加参数,启动mysql 服务: mysqld –skip-grant-tables (sudo vi /etc/mysql/my.cnf,在[mysqld]段中 ...
- Spark小课堂Week6 启动日志详解
Spark小课堂Week6 启动日志详解 作为分布式系统,Spark程序是非常难以使用传统方法来进行调试的,所以我们主要的武器是日志,今天会对启动日志进行一下详解. 日志详解 今天主要遍历下Strea ...
- EXTJS4.2 chart 柱状图
chart 柱状图 Ext.require('Ext.chart.*'); Ext.require(['Ext.Window', 'Ext.fx.target.Sprite', 'Ext.layout ...
- NSUserDefault 的使用(好东东,留着)
1.NSUserDefault的使用: 作用:NSUserDefaults类提供了一个与默认系统进行交互的编程接口.NSUserDefaults对象是用来保存,恢复应用程序相关的偏好设置,配置数据等等 ...
- 自定义Angular指令与jQuery实现的Bootstrap风格数据双向绑定的单选&多选下拉框
先说点闲话,熟悉Angular的猿们会喜欢这个插件的. 00.本末倒置 不得不承认我是一个喜欢本末倒置的人,学生时代就喜欢先把晚交的作业先做,留着马上就要交的作业不做,然后慢悠悠做完不重要的作业,卧槽 ...
- 如何使用 XSD
如何使用 XSD 一个简单的 XML 文档: 请看这个名为 "note.xml" 的 XML 文档: <?xml version="1.0"?> & ...
- ExtJS4.2学习(三)Grid表格(转)
鸣谢:http://www.shuyangyang.com.cn/jishuliangongfang/qianduanjishu/2013-11-07/172.html --------------- ...
- 团体程序设计天梯赛-练习集L2-008. 最长对称子串
L2-008. 最长对称子串 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 对给定的字符串,本题要求你输出最长对称子串的长度. ...
- Avro RPC 之 Protocol 定义和代码生成
摘自http://avro.apache.org/docs/current/spec.html#Protocol+Declaration,1.7.6版 Protocol Declaration Avr ...