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

惯例:插件Demo        Asp.net Demo

效果图:

主要思路是通过分页控件的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>
Email
</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 分页控件(二)的更多相关文章

  1. jquery 分页控件2

    jquery 分页控件(二) 上一章主要是关于分页控件的原理,代码也没有重构.在这一章会附上小插件的下载链接,插件主要就是重构逻辑部分,具体可以下载源文件看下,源代码也有注释.为了测试这个插件是能用的 ...

  2. jquery 分页控件1

    jquery 分页控件(一) 以前一直都是用别人的分页控件,虽然用得很爽,但总觉的还是自己写个小插件比较好,这个插件效果.代码等都有参照别人完成的控件.即便功能并不是那么完善,扩展性也不好,bug或许 ...

  3. jquery 分页控件(一)

    以前一直都是用别人的分页控件,虽然用得很爽,但总觉的还是自己写个小插件比较好,这个插件效果.代码等都有参照别人完成的控件.即便功能并不是那么完善,扩展性也不好,bug或许还很多.个人觉得,适合自己用就 ...

  4. 自己写的简单的jQuery分页控件

    因为是内部项目,需要分页控件,网上找了一大堆,给领导一看,都说不行,原因很简单,太复杂,领导就想要个简单点的,类似百度的分页,可是自己也没写过Jquery控件,硬着头皮找了些资料,写了这个分页控件,目 ...

  5. WPF 自定义分页控件二

    一:添加自定义分页控件,命名为KDataPagerTwo: public class KDataPagerTwo : Control, INotifyPropertyChanged { static ...

  6. jquery 分页控件功能

      <script>        //分页         function getPageNum(num) {             $("#PageNum ul" ...

  7. jQuery.page 分页控件

    分享一下自己在项目中引用的Jquery分页控件 index.html内容 <!DOCTYPE html> <html lang="zh-cn" xmlns=&qu ...

  8. ajax 分页控件,基于jquery

    /* 分页插件,依赖jQuery库 version: 1.1.0 author: Harrison Cao release date: 2013-09-23 相对 v1.0版本 修正了分页居中 使用方 ...

  9. jQuery Pagination Plugin ajax分页控件

    <html> <body> <div id="datagrid"> </div> <div id="paginati ...

随机推荐

  1. ubuntu 下配置Python wxWidgets (复制自官方网站)

    全系统英文官网操作地址:http://wxpython.org/download.php Ubuntu 英文操作地址:http://wiki.wxpython.org/InstallingOnUbun ...

  2. 通过物理模型生成Java代码

    通过物理模型生成Java代码 软件开发过程中,我们一般是先针对数据库建模,物理建模完成后,生成数据库表,编码阶段的时候我们会针对数据库表生成大量的Javaeban或者是实体类 Powertdesign ...

  3. 【BZOJ 1054】 [HAOI2008]移动玩具

    Description 在一个4*4的方框内摆放了若干个相同的玩具,某人想将这些玩具重新摆放成为他心中理想的状态,规定移动时只能将玩具向上下左右四个方向移动,并且移动的位置不能有玩具,请你用最少的移动 ...

  4. linux内核分析之进程地址空间管理

    1.struct task_struct 进程内核栈是操作系统为管理每一个进程而分配的一个4k或者8k内存大小的一片内存区域,里面存放了一个进程的所有信息,它能够完整的描述一个正在执行的程序:它打开的 ...

  5. WdatePicker 设置开始时间和结束时间

    开始时间: <input type="text" placeholder=" -请选择- " readonly="readonly" ...

  6. 使用Yeoman搭建 AngularJS 应用 (5) —— 让我们搭建一个网页应用

    原文地址:http://yeoman.io/codelab/scaffold-app.html 基架 (Scaffolding) 在Yeoman中的意思是为基于你特殊的配置需求,为网站程序生成文件的工 ...

  7. C#中结构体与字节流互相转换

    1.定义与C++对应的C#结构体 在c#中的结构体不能定义指针,不能定义字符数组,只能在里面定义字符数组的引用. C++的消息结构体如下: //消息格式 4+16+4+4= 28个字节 struct ...

  8. [转载]iframe跨域

    最近做的一个项目中需要ajax跨域取得数据,如果是在本域中确实没有问题,但是放到二级域和其他域下浏览器直接就弹出提示框:“该页正在访问其控制范围之外的数据,这有些危险,是否继续" 1.什么引 ...

  9. PAT-乙级-1011. A+B和C (15)

    1011. A+B和C (15) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 HOU, Qiming 给定区间[-231, 231 ...

  10. Educational Codeforces Round 5 A

    Problem A:http://codeforces.com/contest/616/problem/A A. Comparing Two Long Integers 果然还是我太天真了(长整数比较 ...