动动手,写个knockout的分页模板
最近一个项目用ASP.NET + knockout开发,很多列表页面都带分页,于是就有了写一个公共的分页模板的想法。
先把template写好:
<script type="text/html" id="PaginationTemplate" >
<div class="pagination" data-bind="visible: pages().length>0">
<div>
<ul>
<li><a data-bind="click:goToFirst" onclick="clickPaging(this)">首页</a></li>
<li><a data-bind="click:goToPrev" onclick="clickPaging(this)" ><<</a></li>
<!--ko if:showStartPagerDot-->
<li><a >...</a></li>
<!--/ko-->
<!--ko foreach:pages-->
<li data-bind="css: { 'active': $data == $parent.currentPage() }">
@*<a data-bind="text: $data, click: $parent.goToPage.bind($data, $data)" onclick="clickPaging(this)"></a>*@
<a data-bind="text: $data, click: $parent.goToPage.bind($data, $data),style:{'background-color':$('.pagination a').length=='5'?'#CE9E00':'#194DB0'}" onclick="clickPaging(this)"></a>
</li>
<!--/ko-->
<!--ko if:showEndPagerDot-->
<li><a>...</a></li>
<!--/ko-->
<li><a data-bind="click: goToNext" onclick="clickPaging(this)">>></a></li>
<li><a data-bind="click:goToLast" onclick="clickPaging(this)">末页</a></li>
</ul>
<ul>
<li><span >跳转</span></li>
<li>
<input type="text" class="h_20 w_30 txtStl1 mg_t_neg2 " id="pagex" data-bind="value:jumpPage"/>
</li>
<li>
<span data-bind="click: jump" onclick="clickPaging(this)">
@*<button class="btnStl1" type="button" data-bind="click: jump">确定</button></span>*@确定</span> </li>
<li><span data-bind="text: formatedPageCount"></span></li>
</ul>
</div>
<div class="clear"></div>
</div> </script>
接下来就是写knockout的视图模型了:
function paginationViewModel(pageSize, goToPageHandler) {
var self = this, pagerCount = 8;//如果分页的页面太多,截取部分页面进行显示,默认设置显示9个页面
self.pageSize = pageSize;//每页显示的记录数
self.currentPage = ko.observable(1);//当前页面Index
self.jumpPage = ko.observable(1);//需要跳转的页面的Index
self.pageCount = ko.observable(0);//总页数
self.showStartPagerDot = ko.observable(false);//页面开始部分是否显示点号
self.showEndPagerDot = ko.observable(false);//页面结束部分是否显示点号
self.pages = ko.observable([]);//需要显示的页面数量
//计算需要显示的页面的页码
self.caculatePages = function () {
var result = [], pagerCount = 8, start = 1, end = pagerCount;
if (self.currentPage() >= pagerCount) {
start = self.currentPage() - Math.floor(pagerCount / 2);
self.showStartPagerDot(true);
} else {
self.showStartPagerDot(false);
};
end = start + pagerCount - 1;
if (end > self.pageCount()) {
end = self.pageCount();
self.showEndPagerDot(false);
} else {
self.showEndPagerDot(true);
};
for (var i = start; i <= end; i++) {
result.push(i);
};
self.pages(result);
}
//总页数
self.formatedPageCount = ko.computed(function () {
return "共" + self.pageCount() + "页";
});
//页面跳转
self.goToPageHandler = goToPageHandler;
self.goToPage = function (page) {
if (typeof self.goToPageHandler == "function") {
self.goToPageHandler.call(self, page - 1, function (data) {
self.pageCount(Math.ceil(data.count / self.pageSize));
self.currentPage(page);
self.jumpPage(null);
self.caculatePages();
});
};
};
//回到首页
self.goToFirst = function () {
self.goToPage(1);
};
//跳转到最后一页
self.goToLast = function () {
self.goToPage(self.pageCount());
};
//上一页
self.goToPrev = function () {
var cur = self.currentPage();
if (cur > 1) {
self.goToPage(cur - 1);
};
};
//下一页
self.goToNext = function () {
var cur = self.currentPage();
if (cur < self.pageCount()) {
self.goToPage(cur + 1);
};
};
//跳转
self.jump = function () {
var page = self.jumpPage();
if (page > 0 && page <= self.pageCount()) {
self.goToPage(page);
};
};
};
然后直接用列表页面的viewModel继承这个视图模型:
paginationViewModel.apply(self, [10, function (page, pageHandler) {
ajaxQueue.Request("UserQuaList", {
url: self.baseUri,
data:{
userName:self.userName()||"",
quaName:self.quaName()||"",
pageIndex:page,
pageSize:self.pageSize
},
success: function (data) {
pageHandler.call(self, data);
self.userQuas($.map(data.list || [], function (r) { return new userQuaModel(r); }));
}
}).Run();
}]);
页面上分页部分用template绑定:
<td colspan="5" data-bind="template: 'PaginationTemplate'"></td>
大功告成!,试了一下,还不错,以后还可以再加点效果上去。
应大家要求,整了一个Demo源代码:
动动手,写个knockout的分页模板的更多相关文章
- 自己动手写 ASP.NET MVC 分页 part1
学习编程也有一年半载了,从来没有自己动手写过东西,都是利用搜索软件找代码,最近偶发感慨,难道真的继续做码农??? 突发奇想是不是该自己动手写点东西,可是算法.逻辑思维都太弱了,只能copy网上的代码, ...
- 动手写一个简单的Web框架(模板渲染)
动手写一个简单的Web框架(模板渲染) 在百度上搜索jinja2,显示的大部分内容都是jinja2的渲染语法,这个不是Web框架需要做的事,最终,居然在Werkzeug的官方文档里找到模板渲染的代码. ...
- smarty分页模板(用模板语法写分页)
分页是一个我们经常要用到的.比较基本的小功能,你可以通过定义一个方法或类来对它进行封装.重用.而本文则是通过利用smarty独有的语法,以模版的方式进行封装,从而达到同样的目的. 下面开始具体实现步骤 ...
- 【Java EE 学习 57】【酒店会员管理系统之分页模板书写】
分页一直是一个比较麻烦的问题,特别是在我做的这个系统中更是有大量的分页,为了应对该问题,特地写了一个模板以方便代码重用,该模板包括后台分页的模板.前端显示的模板两部分. 一.分页分析 分页需要三种类型 ...
- 自己动手写PHP MVC框架
自己动手写PHP MVC框架 来自:yuansir-web.com / yuansir@live.cn 代码下载: https://github.com/yuansir/tiny-php-framew ...
- KnockOut文档--模板绑定
目的 模板绑定使用数据render模板,然后把渲染的结果填充到Dom树中.模板通过重复或嵌套块(通常为您的视图模型数据的函数)用一种简单,方便的方式来建立复杂的UI结构 . 有两种方式使用模板: Na ...
- 自己动手写Vector【Cherno C++教程】
动手写一个Vector 本文是对<最好的C++教程>的动手写数据结构部分的一个整理,主要包含91p动手写Array数组和92p动手写Vector数组的内容. 自己动手来写这些数据结构是学习 ...
- 【原创】自己动手写控件----XSmartNote控件
一.前面的话 在上一篇博文自己动手写工具----XSmartNote [Beta 3.0]中,用到了若干个自定义控件,其中包含用于显示Note内容的简单的Label扩展控件,用于展示标签内容的labe ...
- 【原创】自己动手写工具----XSmartNote [Beta 3.0]
一.前面的话 在动笔之前,一直很纠结到底要不要继续完成这个工具,因为上次给它码代码还是一年多之前的事情,参考自己动手写工具----XSmartNote [Beta 2.0],这篇博文里,很多园友提出了 ...
随机推荐
- oracle11g ASM(修复损坏的磁盘组头asm修复2)
--编KFED [oracle@rac2 lib]$cd $ORACLE_HOME/rdbms/lib [oracle@rac2 lib]$ pwd /u01/app/oracle/product/1 ...
- dede织梦背景经常使用标签
一些非常实用的标签调用的方法 关键描写叙述调用标签: <meta name="keywords" content="{dede:field name='keywor ...
- 自己写CPU第五级(5)——测试逻辑、实现移动和空指令
我们会继续上传新书<自己写CPU>(未公布),今天是19片,我每星期试试4 5.6 測试程序1--測试逻辑操作实现效果 编写例如以下測试程序用于检验逻辑操作指令是否实现正确,文件名称命名为 ...
- 网络资源(1) - Hadoop视频
2014_08_23: hadoop03c_分布式文件系统HDFS http://v.youku.com/v_show/id_XNDgwNjg1OTY0.html?f=18604686 2014_08 ...
- java_windows下修改eclipse的默认编码
windows下修改eclipse的默认编码 windows下一般系统编码为 GB2312(中文版的windows), 由于我比较喜欢utf8格式的编码,现将修改方式和大家分享 如果要使新建立工程 ...
- Metrics监控应用
使用Metrics监控应用程序的性能 在编写应用程序的时候,通常会记录日志以便事后分析,在很多情况下是产生了问题之后,再去查看日志,是一种事后的静态分析.在很多时候,我们可能需要了解整个系统在当前 ...
- 安全系列之二:OAuth2.0 开放授权协议
本文提取出OAuth2.0规范RFC6749的主要内容,部分内容从文档复制出来,给大家讲讲第三方授权背后的故事. 先是举个知乎的QQ登录授权的例子,然后讲四种授权方式,两种令牌,接着是看看协议流程,分 ...
- (转)javabean操作文件正确,但是Jsp调用javabean时文件路径出错问题解决之JavaBean访问本地文件实现路径无关实现方法
在JSP中,页面链接是使用web路径的,但如果JavaBean要访问本地文件读取配置信息的话,是需要文件的本地路径的.如果你在写 Bean的时候直接将本地路径写进去,那网站的路径就不能变化,丧 ...
- Linux下df与du两个命令的差别?
Linux下df与du两个命令的差别? 一.df显示文件系统的使用情况,与du比較,就是更全盘化. 最经常使用的就是 df -T,显示文件系统的使用情况并显示文件系统的类型. 举比例如以下: [roo ...
- Oracle中的二进制、八进制、十进制、十六进制相互转换函数
原文:Oracle中的二进制.八进制.十进制.十六进制相互转换函数 Oracle中的二进制.八进制.十进制.十六进制相互转换函数 今天在网上看到一篇关于在oracle中对各种进制数进行转换的帖子, ...