有了jsRender,妈妈再也不用担心我用jq拼接DOM拼接的一团糟了、页面整齐了、其他伙伴读代码也不那么费劲了

写在前面

说来也很巧, 下午再做一个页面,再普通不过的分页列表,我还是像往常一样,基于MVC环境下,我正常用PagedList.MVC AJAX做无刷新分页,这时候问题就来了,列表数据中有个轮播图用到了slides.js插件,轮播图也用到了分页,数据第一页轮播图页码能正常使用,数据列表翻到第二页则轮播图的页码就无法正常使用,实际上PagedList.MVC自带的样式文件已经和slides.j自带的样式文件冲突,我还特意修改了slides.js的样式文件,然并无卵用,让郁闷飞一会。。。

1、基于MVC PagedList.MVC的分页写法

var currentPage = 1;
        $(function () {

            //工具栏绑定页码
            currentPage = $(‘.pagination li.active‘).text();
            currentPage = $(‘.pagination li.active‘).text();
            $(‘body‘).on(‘click‘, ‘.pagination li:not(".active")‘, function (e) {
                var txtnum = $(this).text();
                if (parseInt(txtnum) > 0) {
                    DoSearch(txtnum);
                } else if (txtnum == ‘»‘) {
                    DoSearch(parseInt(currentPage) + 1);
                } else if (txtnum == ‘«‘) {
                    DoSearch(parseInt(currentPage) - 1);
                } else if (txtnum == ‘««‘) {
                    DoSearch(1);
                } else if (txtnum == ‘»»‘) {
                    var pagenum = $(this).find(‘a‘).attr("href").replace(/[^\d]+/gi, ‘‘);
                    DoSearch(pagenum);
                }
                return false;
            });
        });

//列表复合查询条件
function DoSearch(page) {
         var item = {};
         if (page) {
            item.pageIndex = page;
          }

          PostData(item);

        }

//重点就是这个方法,用于AJAX分页效果,主要是利用页面携带的数据来循环替换
function PostData(objdata) {
         $.post(‘/Home/Index?rdm=‘ + Math.random(), objdata, function (d) {
               //1、替换页面内列表数据
                $(".contentajax").html($(d).find(".contentajax").html());
               //2、替换页码
               $(".ajaxpage").html($(d).find(".ajaxpage").html());
                currentPage = $(‘.pagination li.active‘, $(d)).text();

        });
 }

  

2、郁闷时在园子里看到一位朋友发的jq分页插件

http://www.cnblogs.com/Jusoc/p/4757079.html#3254097 这是他的文章,他在文章中提到这个jq分页插件,插件的样式是仿照bootstrap做的,API用起来还算是比较方便。

3、效果图

4、 理论再华丽还是要用coding来实践并发现js模版插件

我按照这位朋友文章中写到的用法以及查看API写了个demo,发现程序没有报错就是没有数据,他提到remote参数中包含3个事件:beforeSend、success、complete,注释中写到在success中处理后台返回的数据,也就是个json串,json串中必须包含数据总数(total或count)。 我在demo中看到这三个事件不起来作用,不知道这位伙计自己实践了没有,于是我查看插件源码,发现源码中只有一个callback事件,在这里处理返回的数据,OK,解决了数据返回问题。

下面问题又来了,由于是分页,还算是比较正常的需求,那么这时候我就发现,通常的做法肯定是直接在callback中foreach,各种拼接字符串、单引号、双引号。 我拼着拼着自己就拼不下去了,我接着看这个插件的DEMO,该插件的pageIndex是从0开始,好多插件都是从1开始,所以基于linq的分页一般都这样写:((pageIndex-1)*pageSize),那如果是0的话就不用减了。 在API的下方一个概念吸引了我的眼球:如何呈现返回的数据,介绍一款jq模版插件,只需定义呈现模版,一行js搞定数据呈现。其实js模版倒不是多么陌生,只是以前没去用过,觉的拼接jq就很牛气了,没想到这个模版这么大的魅力。 而且一定程度上这个模版的思想就像Angularjs的数据操作方式一样。

纠结了这半天我又重新把DEMO写了一遍,搞定。 DEMO虽简单,但是带给我的收获缺很大, 我会重构我们的项目,并且推广前台尝试这种方式。

5、关键地方处理代码

 1 @{
 2     ViewBag.Title = "Index";
 3     Layout = "~/Views/Shared/_Layout.cshtml";
 4 }
 5 <style>
 6     h2
 7     {
 8         margin-left:80px;
 9     }
10 </style>
11 <link href="~/Content/bootstrap.css" rel="stylesheet" />
12 <link href="~/Content/jquery.pagination.css" rel="stylesheet" />
13 <h2>jq Pagination and js Template</h2>
14 <div class="container">
15     <table id="rsTable" class="table table-striped">
16         <thead>
17             <tr>
18                 <th>ID</th>
19                 <th>Name</th>
20                 <th>Price</th>
21             </tr>
22         </thead>
23         <tbody id="rsbody">
24
25         </tbody>
26
27     </table>
28     <div id="pager" class="m-pagination"></div>
29 </div>
30
31 <script src="~/Scripts/jsrender.min.js"></script>
32 <script src="~/Scripts/jquery.pagination-1.2.1.js"></script>
33 <script type="text/javascript">
34     $(function () {
35
36         $("#pager").page({
37             remote: {
38                 url: ‘/Home/AjaxList‘, //请求地址
39                 param: {},             //请求参数
40                 callback: function (data) {
41                     //回调函数,处理返回值
42                     var modelList = data.modelList;
43                     $("#rsbody").empty().html($("#trTmpl").render(modelList));
44                 },
45                 pageIndexName: ‘pageIndex‘,
46                 pageSizeName: ‘pageSize‘,
47                 totalName: ‘total‘
48             },
49             pageSize: 3
50         });
51     });
52 </script>
53 <script type="text/x-jsrender" id="trTmpl">
54     <tr>
55        <td>{{:ID}}</td>
56        <td>{{:Name}}</td>
57        <td>{{:Price}}</td>
58     </tr>
59 </script>
 public ActionResult Index()
        {
            return View();
        }

        public JsonResult AjaxList()
        {
            int pageIndex = Convert.ToInt16(Request["pageIndex"]);
            int pageSize = Convert.ToInt16(Request["pageSize"]);
            IList<Product> list = new List<Product>()
            {
                new Product{ID=1,Name="iphone6 plus",Price=6999},
                new Product{ID=2,Name="iphone6",Price=4999},
                new Product{ID=3,Name="MX5",Price=1799},
                new Product{ID=4,Name="MEILAN NOTE",Price=799},
                new Product{ID=5,Name="XIAOMI 2S",Price=1299}
            };

            IList<Product> modelList = list.Skip(pageIndex * pageSize).Take(pageSize).ToList();
            int count = list.Count;

            var strJson = new JsonResult();
            strJson.Data = new
            {
                modelList=modelList,
                total=count
            };
            strJson.JsonRequestBehavior = JsonRequestBehavior.AllowGet;

            return strJson;
        }

总结

虽说是做了个分页的demo,但是在使用这个分页插件的过程中,却发现了js模版插件这个好东西,写法简洁而且页面jq也简洁不少。 以前还写过一片基于MVC Angularjs分页。多多对比,根据自己需要使用。

下载链接:http://yunpan.cn/cmfE7xgsWqqKV  访问密码 4d30

时间: 2024-08-09 10:39:05

有了jsRender,妈妈再也不用担心我用jq拼接DOM拼接的一团糟了、页面整齐了、其他伙伴读代码也不那么费劲了的相关文章

妈妈再也不用担心我找不到文件了---find

1.find vs locate 在实际中,我们经常需要查找到一些特定文件,然后进行处理,LINUX提供了locate , find这两个命令用于文件查找. a.locate,非实时查找,非精确查找.linux会定期生成更新文件数据库,而locate将根据文件数据库进行查找.我们可以在使用locate命令前,更新文件数据库,使用updatedb即可.但是updatedb将会花费可能半天时间,SO LONG! b.find , 实时查找,精确查找.根据指定路径,查找标准,进行文件遍历(包括隐藏文件

Swift详解之四-------妈妈再也不用担心我的闭包了

妈妈再也不用担心我的闭包了 注:本文为作者自己总结,过于基础的就不再赘述 ,都是亲自测试的结果.如有错误或者遗漏的地方,欢迎指正,一起学习. swift中闭包是一个很强大的东西,闭包是自包含的函数代码块,可以在代码中被传递和使用.跟C 和 Objective-C 中的代码块(blocks)很相似 .这个大家必须掌握!必须掌握!必须掌握!重要的事情要说三遍 闭包可以捕获和存储其所在上下文中任意常量和变量的引用. 这就是所谓的闭合并包裹着这些常量和变量,俗称闭包.下面我们就来攻克它! 1.闭包函数

利用CH341A编程器刷新BIOS,恢复BIOS,妈妈再也不用担心BIOS刷坏了

前几天,修电脑主析就捣鼓刷BIOS,结果刷完黑屏开不了机,立刻意识到完了,BIOS刷错了.就从网上查资料,各种方法试了个遍,什么用处都没有.终于功夫不负有心人,找到了编码器,知道了怎么用.下面看看具体用法: 先买了一个便宜点的编码器: <ignore_js_op> 把刷错的BIOS芯片先拆下来:<ignore_js_op> 把芯片放到编码器上: 再找一台电脑,我的笔记本派上用场了,下载编码器的驱动程序和编码器软件:  <ignore_js_op> <ignore_

Xcode7的发布后的crash跟踪,轻松定位崩溃代码 Address Sanitizer: 妈妈再也不用担心 EXC_BAD_ACCESS

Xcode7中苹果为我们增加了两个重要的debug相关功能.了解之后觉得非常实用,介绍给大家. 1.Address Sanitizer: 妈妈再也不用担心 EXC_BAD_ACCESS? EXC_BAD_ACCESS一直是很多开发者的噩梦,因为这个错误很不直观,出现后往往要花很长时间才能定位到错误.苹果这次带来了革命性的提升. 在项目的Scheme中Diagnostics下,选中enable address sanitizer(注意选中后Xcode会重新编译整个项目). 这样设置后,如果再出现类

妈妈再也不用担心我js跨域了。。

$.getJSON('http://www.example.com/?aa=bb&callback=?', function(r){ console.log(r) }); //callback=?参数带上,妈妈再也不用担心我跨域了.jquery的getJSON利用的也是JSONP的原理去实现的.

Matlab命令合集 妈妈再也不用担心我不会用matlab了

matlab命令 一.常用对象操作:除了一般windows窗口的常用功能键外.1.!dir 可以查看当前工作目录的文件. !dir& 可以在dos状态下查看.2.who 可以查看当前工作空间变量名, whos 可以查看变量名细节.3.功能键:功能键 快捷键 说明方向上键 Ctrl+P 返回前一行输入方向下键 Ctrl+N 返回下一行输入方向左键 Ctrl+B 光标向后移一个字符方向右键 Ctrl+F 光标向前移一个字符Ctrl+方向右键 Ctrl+R 光标向右移一个字符Ctrl+方向左键 Ctr

收藏 | 15 个你非了解不可的 Linux 特殊字符,妈妈再也不用担心我看不懂这些符号了!

原文:收藏 | 15 个你非了解不可的 Linux 特殊字符,妈妈再也不用担心我看不懂这些符号了! 不知道大家接触 Linux 系统有多久了,可曾了解过 Linux 中有哪些特殊的字符呢?其实啊,那些特殊字符都大有用处呢,今天的文章就给大家简单地科普一下 Linux 中你需要了解的 15 个特殊字符,想学或刚学 Linux 的小伙伴赶紧上车了为! ~ 主目录 这个波浪号 ~ 指的是主目录,也就是我们用户的个人目录,无论你身在何方,输入 cd ~ 它将带你回家! cd ~ 更高端的玩法就是在它后面

妈妈再也不用担心我使用git了

Dec 29, 2014 git git由于其灵活,速度快,离线工作等特点而倍受青睐,下面一步步来总结下git的基本命令和常用操作. 安装msysgit 下载地址:msysgit,安装完成后配置系统环境变量,打开git bash,尽量少用图形化工具git gui,推荐使用命令行. 你可以在本地操作git,也可以在远程服务器仓库操作git,例如github,这样你就需要配置下ssh key,详情请查看官方文档说明generating-ssh-keys git操作 1.检出仓库(克隆仓库) 本地克隆

玩物涨智:妈妈再也不用担心我的学习了

早上逛国外网站的时候看到了一篇挺有意思的文章,描述的是提升人类智力的几种方法.其中包含了为中国父母们所深恶痛绝的电子游戏等方式. 下面对这几种方法做简要的描述如下: 运动有利于物体识别记忆.会释放脑源性神经营养因子(BDNF),BDNF可由大脑自然分泌,能够起到调节痛苦和恐惧的作用,BDNF缺乏会导致创伤后压力紊乱,也就是俗称的恐惧症.BDNF能够使大脑不断重写覆盖痛苦的记忆,并在重写的过程中建立信心和安全感. 玩乐器可以提升认知能力,语言表达能力,和信息处理能力等 玩电子游戏能开发我们的工作记