当前位置: 首页 > news >正文

游戏网站建设的必要性深圳最新新闻事件今天

游戏网站建设的必要性,深圳最新新闻事件今天,国外有哪些做服装的网站有哪些方面,大气学校网站模板原帖地址:http://blog.fens.me/nodejs-bootstrap-paginator/ 从零开始nodejs系列文章,将介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发。Nodejs框架是基于V8的引擎,是目前速度最快的Javascript引擎。chrome浏览器就基…

原帖地址:http://blog.fens.me/nodejs-bootstrap-paginator/



从零开始nodejs系列文章,将介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发。Nodejs框架是基于V8的引擎,是目前速度最快的Javascript引擎。chrome浏览器就基于V8,同时打开20-30个网页都很流畅。Nodejs标准的web开发框架Express,可以帮助我们迅速建立web站点,比起PHP的开发效率更高,而且学习曲线更低。非常适合小型网站,个性化网站,我们自己的Geek网站!!

关于作者
张丹(Conan), 程序员Java,R,PHP,Javascript
weibo:@Conan_Z
blog: http://blog.fens.me
email: bsspirit@gmail.com

转载请注明出处:
http://blog.fens.me/nodejs-bootstrap-paginator/

前言

分页功能是查询的必备功能,比如我要查询一个多于1000条记录的结果集。如果一次全部展示,不仅浪费带宽,增长等待时间,用户看到这么多的数据也会觉得的头疼。但是有了分页功能,可以根据用户的习惯,一页一页的处理少量的数据,展示少量的数据,就像是在看书一样的。

分页功能非常实用,但是实现起来也稍有复杂。不仅要考虑到前端的展示和传值问题,还要考虑后端面向数据的查询语句。不过我也发现了前端和后端对应的解决的方案。前端程序可以通过bootstrap-paginator项目来封装,而后端我是自己实现的。本来是准备使用mongoose-paginate项目,但他的设计过于简单,而且与bootstrap-paginator的一些传参习惯不符,自已实现其实更好控制。

page

目录

  1. 分页前端雏形bootstrap-paginator
  2. 分页后端查询mongoose
  3. 分页结果返回页面(后端->前端)
  4. 分页查询参数传递(前端->后端)
  5. 分页完整展现

 

1. 分页前端雏形bootstrap-paginator

下载bootstrap-paginator:下载地址
解压后,把bootstrap-paginator.min.js文件复制到public/js的目录

如果你的项目,已经配置了bootstrap, jquery。 那么你只需要在用到分页的网页上增加一行js包的引用就可以了。

~ vi view/admin/moive.html
<html>
<head>
<link href="/css/bootstrap.min.css" rel="stylesheet" media="screen" />
<script type="text/javascript" src="/js/bootstrap.min.js"></script>
<script type="text/javascript" src="/js/bootstrap-paginator.min.js"></script>
</head>
<body>
<!-- 代码片断 查询表单 -->
<form method="GET">
...
</form><!-- 代码片段 分页控件 -->
<div class="span12">
<div id="page1"></div>
</div><!-- 代码片段 查询结果 -->
<div class="span12">
<table class="table table-hover table-striped">
...
</table>
</div><!-- 代码片段 -->
<script type="text/javascript">
$(function(){//分页功能
var options = {
currentPage:2,
totalPages:5,
numberOfPages:5
}
$('#page1').bootstrapPaginator(options);})
</script></body>
</html>

显示效果:

p2

2. 分页后端查询mongoose

使用mongoose访问mongodb,在 Mongoose使用案例–让JSON数据直接入库MongoDB 一文中已经讲过。

我们构建分布查询的DAO。

  • 这里Movie是model类型,没有用到entity。直接通过model做的分页查询。
  • 分页查询是二步查询,第一步查询结果集数据,第二步查询总记录
  • 通过skip,limit进行分页。(关于skip的效率问题,10W以下的记录,skip性能是可以接受的,10w以上的记录需要根据排序的字段,通过索引定位查询,这个概念以后再讲。)
  • 排序功能默认用插入时间倒叙:sort(‘-create_date’)

查询参数:

  • q,查询条件
  • col,数据返回字段
  • pageNumber,当前是第几页,如果不存在默认为第1页
  • resultsPerPage,每页多少条记录

分页的返回值

  • null:空错误,因为错误已经通过if处理了
  • pageCount:一共有多少页
  • results:数据结果集

~ vi model/Movie.jsvar Movie = mongodb.mongoose.model("Movie", MovieSchema);
var MovieDAO = function(){};//代码片段MovieDAO.prototype.findPagination = function(obj,callback) {var q=obj.search||{}var col=obj.columns;var pageNumber=obj.page.num||1;var resultsPerPage=obj.page.limit||10;var skipFrom = (pageNumber * resultsPerPage) - resultsPerPage;var query = Movie.find(q,col).sort('-create_date').skip(skipFrom).limit(resultsPerPage);query.exec(function(error, results) {if (error) {callback(error, null, null);} else {Movie.count(q, function(error, count) {if (error) {callback(error, null, null);} else {var pageCount = Math.ceil(count / resultsPerPage);callback(null, pageCount, results);}});}});
}

 

3. 分页结果返回页面(后端->前端)

传参数到页面:page对象

  • limit:5,每页限制5条记录
  • num:1,查询的页面
  • pageCount,一共有多少页
  • size,当前页面有多少条记录
  • numberOf,分页用几个标签显示

~ vi routes/moive.js//代码片段
exports.movie = function(req, res) {
var search={};
var page={limit:5,num:1};//查看哪页
if(req.query.p){
page['num']=req.query.p<1?1:req.query.p;
}var model = {
search:search,
columns:'name alias director publish images.coverSmall create_date type deploy',
page:page
};Movie.findPagination(model,function(err, pageCount, list){
page['pageCount']=pageCount;
page['size']=list.length;
page['numberOf']=pageCount>5?5:pageCount;return res.render('admin/movie', {
title:'电影|管理|moive.me',
page:'admin',nav:'admin.movie',
movieList:list,
page:page
});
});
}

4. 分页查询参数传递(前端->后端)

前端向后端:参数传递过程

  • 通过javascript,从页面向控制器传参数p.
  • 通过composeUrlParams函数,封装原表单的查询参数
  • 通过pageUrl函数,拼接带分布的url请求

后端向前端:参数传递过程

  • 如果page1的div增加自定义属性
  • 在页面渲染时,通过js解析div增加自定义属性,赋值给bootstrap-paginator控件
~ vi view/admin/moive.html//修改分页的div,增加自定义的属性
<div class="span12">
<div id="page1" pageCount="<%=page.pageCount%>" pageNum="<%=page.num %>" pageSize="<%=page.size%>" pageLimit="<%=page.limit%>" numberOfPages="<%=page.numberOf%>"></div><!-- 代码片段 -->
<script type="text/javascript">
$(function(){//获得浏览器参数
$.extend({
getUrlVars: function(){
var vars = [], hash;
var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
for(var i = 0; i < hashes.length; i++){
hash = hashes[i].split('=');
vars.push(hash[0]);
vars[hash[0]] = hash[1];
}
return vars;
},
getUrlVar: function(name){
return $.getUrlVars()[name];
}
});//封装浏览器参数
var composeUrlParams=function(){
var param='';
$.each($.getUrlVars(), function(i, item) {
if(item!='p'){
var val=$.getUrlVar(item);
if(val) param += "&" + item+"="+val;
}
});
return param;
}//分页功能
var page=$('#page1');
var options = {
currentPage:page.attr('pageNum'),
totalPages:page.attr('pageCount'),
numberOfPages:page.attr('numberOfPages'),
pageUrl: function(type, page, current){
return "/admin/movie?"+composeUrlParams()+"&p="+page;
}
}
$('#page1').bootstrapPaginator(options);
})
</script>

5. 分页完整展现

p1

 

分页功能可能实现起来稍有复杂,如果可以完整地封装成一个控件,就会变得非常简单了。不知道是否已经有人做好了这个控件。

如果有时间,我可能也会写一下。希望能帮助到对分页还陌生的朋友。

 

转载请注明出处:
http://blog.fens.me/nodejs-bootstrap-paginator/


http://www.lbrq.cn/news/2759635.html

相关文章:

  • 重庆市项目经理在建查询南宁seo推广优化
  • 做房产信息网站许昌网站seo
  • 中山网红长沙网站seo诊断
  • 网站建设的功能需求希爱力的功效及副作用
  • 电影网站做seo建材企业网站推广方案
  • 网站建设读后感搜索引擎营销概念
  • 无锡网站制作公司排名官方进一步优化
  • 深圳有哪些网站开发公司网站推广软件免费版
  • 百度推广区域代理黑帽seo工具
  • 旅游网站系统设计重庆seo外包平台
  • wordpress外贸B2C建站泉州全网营销推广
  • 深圳 网站科技山西网络推广
  • 网站改版定位策划书今日热点新闻头条
  • 湖北网络建设公司网站南京今天重大新闻事件
  • wordpress 最新漏洞班级优化大师官方网站
  • 网站建设武汉谷歌浏览器搜索引擎入口
  • 做miui主题网站广告投放平台有哪些
  • 中交建设集团网站无排名优化
  • 网站系统维护要多久百度在全国有哪些代理商
  • 许昌做网站团队武汉seo网站推广
  • 网站seo策略网络营销的营销理念
  • 网站建设流程分为三个步骤国内免费推广产品的网站
  • 职业生涯规划大赛演讲稿5分钟深圳网站seo服务
  • 关于网站空间百度搜索页
  • 怎么样用ps做网站百度网页版网址
  • 成都市网站制作一站式网络营销
  • 网站与微信结合百度官网网站
  • 只做一种产品的网站百度推广怎么弄
  • 产品展示型网站有哪些百度seo搜索引擎优化
  • 大连做网站谁家售后好今日头条国际军事新闻
  • Redis 客户端接口介绍
  • 自由学习记录(85)
  • 麒麟V10静默安装Oracle11g:lsnrctl、tnsping等文件大小为0的解决方案
  • 详解flink java基础(一)
  • 小白学习《PCI Express体系结构导读》——第Ⅰ篇第1章PCI总线的基本知识
  • Spring Framework:Java 开发的基石与 Spring 生态的起点