Bootstrap嵌入jqGrid,使你的table牛逼起来(2)

简介: Bootstrap嵌入jqGrid,使你的table牛逼起来

一点都不熟悉jqGrid的同学,建议先看jqGrid的demo,以及jqGrid的官方文档,当然了,对于已经熟悉jqGrid的同学,doc和demo肯定是必看的。


以上文件列出的属性非常多,对于jqGrid,我不做过多的介绍,本篇的主旨主要来介绍如何将jqGrid嵌入到bootstrap,那么重点就不在于介绍jqGrid上,我只介绍几个关键点:


formatter: function(cellvalue, options, rowObject) {,formatter还是很经常要使用的,那么对于如何获得对应单元格的值就很重要,我的jqGrid使用的是xml(datatype : “xml”)数据格式,那么可通过$(rowObject).find("deal_id").text()找到对应deal_id列的值。

xmlReader : { repeatitems : false, root : "PageGrid",,注意xmlReader中的参数值,在接下来介绍④jqGrid的数据操作会细节介绍,和后台的xml数据封装有关系。

$("#pageGrid").footerData("set", {image_str : "支付总花费:", order_price : json.message});,关于footerData方法,使用起来也很方便,效果可参照效果图。

initEnv(jqOption);方法,在页面onload后,我们将jqGrid的初始化参数传递给initEnv方法,后续③jqGrid在bootstrap中的模块化会介绍initEnv方法。

####③、jqGrid在bootstrap中的模块化

②中我们注意到initEnv方法,那么这个方法内部就是专门针对jqGrid做的模块化封装工作。


initEnv方法


function initEnv(jqOption) {


$(window).resize(function() {

 initLayout();

});


initUI(null, jqOption);

}


该方法中,我们将会看到initLayout方法和initUI方法,具体内容稍候介绍。


initLayout


function initLayout() {

$("table[rel=jqgridForm]").each(function() {

 var rel = $(this).attr("rel");

 if (rel) {

  var $form = $("#" + rel);

  var tableWidth = $form.width();

  $(this).setGridWidth(tableWidth, true);

 }

});

}


也就是说,在窗口缩放的时候,我们为jqGrid重新绘制宽度,使其自适应于bootstrap的响应式布局。使用的方法就是jqGrid的setGridWidth方法。



initUI

function initUI(_box, jqOption) {
  var $p = $(_box || document);
  if (jqOption) {
    YUNM.debug("初始化jqgrid");
    var $form = $("#" + $("#pageGrid").attr("rel"));
    YUNM.debug(YUNM.array2obj($form.serializeArray()));
    // 初始化
    var op = $.extend({
      url : $form.attr("action"),
      postData : YUNM.array2obj($form.serializeArray()),
    }, jqOption);
    $("#pageGrid").jqGrid(op);
    // 检索按钮
    $("#searchBtn", $form).click(function() {
      $("#pageGrid").jqGrid('setGridParam', {
        url : $form.attr("action"),
        page : 1,
        postData : YUNM.array2obj($form.serializeArray()),
      });
      $("#pageGrid").trigger("reloadGrid");
    });
    // toolbar,将button的圆角去掉
    $(".btn", $form).each(function() {
      var $this = $(this);
      $this.css({
        "border-radius" : "0px",
        "border-bottom" : "0",
      });
    });
  }
}
array2obj : function(array) {
  var params = $({});
  $.each(array, function(i) {
    var $param = $(this)[0];
    params.attr($param.name, $param.value);
  });
  return params[0];
},



如果你曾看过我之前的系列文章,对于initUi方法就不会太陌生,熟悉dwz的朋友,自然也不会陌生,我项目中的大部分模板还是依赖于dwz,谢谢这些前辈们。


var $form = $("#" + $("#pageGrid").attr("rel"));由于我们在jqGrid上关联了form检索条件的form表单,此处就可以将form表单对象取到,取到form表单对象,自然也就去得到了检索域的值($form.serializeArray())。

拿到form表单的检索域值后,此时就需要做一番处理了。我们知道,jqGrid在向controller传递参数时,必然需要上送分页、排序的相关字段(page、rows、sord、sidx),使用的方法是$("#pageGrid").jqGrid({postData:xxx});,通常情况下,我们上送form表单时,只需要使用$form.serializeArray()就可以,但如果此时,只是将xxx替换为$form.serializeArray(),那么controller中将不会获得分页、排序的相关字段(page、rows、sord、sidx),这是一个冲突,此时怎么处理呢?解决办法就是将form表单数据对象化(array2obj 方法),然后我们再通过var op =$.extend({url:$form.attr("action"),postData:YUNM.array2obj($form.serializeArray()),},jqOption);$("#pageGrid").jqGrid(op);将检索域的值和分页、排序的相关字段一起上送到controller。

$("#searchBtn", $form).click通过封装click事件,将jqGrid的数据重新加载。

$(".btn", $form).each(function() {此处的方法将检索button去圆角,使其更贴合jqGrid,见效果图。


相关文章
|
JSON 前端开发 数据格式
bootstrap table表格的点击详情按钮操作
bootstrap table表格的点击详情按钮操作
101 1
|
6月前
|
前端开发 容器
bootstrap table 设置自定义列宽
【5月更文挑战第4天】bootstrap table 设置自定义列宽
|
前端开发 JavaScript
Bootstrap Table根据参数搜索功能
Bootstrap Table根据参数搜索功能
95 0
|
前端开发
bootstrap table表格去掉排序箭头
bootstrap table表格去掉排序箭头
202 2
|
前端开发
bootstrap table表格外面的边框全部去掉
bootstrap table表格外面的边框全部去掉
209 1
|
前端开发
bootstrap table点击修改按钮给弹框赋值
bootstrap table点击修改按钮给弹框赋值
50 0
|
JSON 前端开发 数据库
Bootstrap Table使用教程(请求json数据渲染表格)
Bootstrap Table使用教程(请求json数据渲染表格)
151 0
|
前端开发
bootstrap table分页悬停颜色改变
bootstrap table分页悬停颜色改变
38 0
|
前端开发
解决bootstrap table刷新加载时白色闪屏问题
解决bootstrap table刷新加载时白色闪屏问题
80 0
|
前端开发
bootstrap table+layer实现一个表格删除
bootstrap table+layer实现一个表格删除
55 0
下一篇
无影云桌面