jqGrid的封装

  今天捣鼓了半天的jqGrid,搜索了很多结果看看这家伙怎么用,每个参数的含义,发现也不是很完美。比如本地排序+json绑定,貌似不支持。

  虽然以前自己也写过类似的插件,不过自己都懒的维护,还是用jqGrid这样的,也方便项目的维护工作。 

  做了一个小小的封装,目前只支持json绑定。 用法如下:

前端代码:

<table id="lst" title="博客多次发表文章审核" multiselect=1>
    <thead>
        <tr>
            <th name="UserName" width="100" sort=1>
                用户名
            </th>
            <th name="Articles">
                发表的文章
            </th>
        </tr>
    </thead>
    <tfoot>
        <tr>
            <td>
                <button function="checkedall">审核通过</button>
                <button function="deleteall">批量封杀</button>
            </td>
        </tr>
    </tfoot>
</table>
<div id="pager">
</div>
 
<script src="@Url.Content("~/Scripts/common.js")" type="text/javascript"></script>
<script type="text/javascript">
 
    $("#lst").bindTable('MultiPostData?' + new Date().getTime(), function (data) {
        $.each($("#lst").getDataIDs(), function (i) {
            var html = "";
            for (var j = 0; j < data.list[i].Articles.length; j++) {
                var article = data.list[i].Articles[j];
                html += "<li><a href=''>" + article.Title + "</a></li>";
            }
            $("#lst").jqGrid("setRowData", this, { "Articles": html });
        });
    });
</script>

后端代码:

public JsonResult MultiPostData()
{
    var list = new List<dynamic>();
 
    list.Add(new { UserName = "Test1", Articles = new[] { new { ArticleId = 1, Title = "测试文章1" }, new { ArticleId = 1, Title = "测试文章12" }, new { ArticleId = 1, Title = "测试文章23" } } });
    list.Add(new { UserName = "Test2", Articles = new[] { new { ArticleId = 2, Title = "测试文章2" } } });
    list.Add(new { UserName = "Test3", Articles = new[] { new { ArticleId = 3, Title = "测试文章3" } } });
    list.Add(new { UserName = "Test4", Articles = new[] { new { ArticleId = 4, Title = "测试文章4" } } });
    list.Add(new { UserName = "Test5", Articles = new[] { new { ArticleId = 5, Title = "测试文章5" } } });
 
    return Json(new { page = Request.Query("page").ToInt(1), list, records = 50, total = 50 / list.Count }, JsonRequestBehavior.AllowGet);
}

封装的jqGrid,因为不封装,每次都要写一遍很麻烦。。。 改起来也不容易。

(function ($) {
    $.fn.bindTable = function (url, callback, funcs) {
        var me = this;
        var pagesize = me.attr("pagesize");
        var datatype = me.attr("datatype") || "json";
        var multiselect = me.attr("multiselect") == "1";
        var title = me.attr("title") || document.title;
 
        var pagerId = me.attr("pager") || "pager";
 
        var dataroot = me.attr("dataroot") || "list";
 
        funcs = funcs || {};
 
        var colNames = [];
        var colModels = [];
 
        var idx = multiselect ? 1 : 0;
        $("thead th", me).each(function () {
            var th = $(this);
            colModels.push({
                name: th.attr("name"),
                width: parseInt(th.attr("width")) || 0,
                sortable: th.attr("sort") == "1",
                hidden: th.text() == "",
                title: th.attr("showtitle") != "0",
                type: th.attr("type") || "string",
                index: idx++
            });
 
            colNames.push(th.text());
 
        });
 
        if (colNames.length == 0) {
            alert("列为空");
            return me;
        }
 
        if (typeof (arguments[1]) == "object") {
            funcs = arguments[1];
            callback = undefined;
        }
 
        var buttons = [];
        $("tfoot button", me).each(function () {
 
            var fname = $(this).attr("name");
 
            var func = funcs[fname];
 
            if (func == undefined) func = function () { eval(fname + "()"); };
            buttons.push({
                caption: $(this).text(),
                onClickButton: func
            });
        });
        me.jqGrid({
            height: 'auto',
            url: url,
            datatype: datatype,
            colNames: colNames,
            colModel: colModels,
            rowNum: pagesize,
            pager: pagerId,
            multiselect: multiselect,
            autowidth: true,
            jsonReader: { root: dataroot, repeatitems: false },
            caption: title,
            loadComplete: function (data) {
                if (!!callback) callback(data, me);
                setOrder(me.attr("id"), colModels);
            }
        });
 
        me.navGrid("#" + pagerId, { edit: false, add: false, del: false, search: false, refresh: true });
 
        if (buttons.length > 0) {
            $.each(buttons, function (i) {
                me.navButtonAdd("#" + pagerId, buttons[i]);
            });
        }
    };
 
})(jQuery);

posted @   君之蘭  阅读(3108)  评论(2编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示