bootstrapTable自定义列本地存储

bootstrapTable自定义列本地存储

    • 需求分析
    • 思路整理
    • 完整代码

需求分析

近来有这么一个需求,bootstrapTable中可以手动选择显示和隐藏列,当用户选择了哪些列显示哪些列隐藏,用户下次再进入此表格时,能够记录上一次用户的选择,除非清除浏览器的缓存才会重置用户的选择。

思路整理

  1. 使用浏览器的本地缓存,把用户隐藏的列存入本地缓存中
//本地缓存定义
var oStorage = {
		  _Storage: window.localStorage,
		  // 是否支持缓存
		  isSupportStorage: function () {
		    return this._Storage != undefined ? true : false;
		  },
		  // 是否有缓存
		  hasItem: function (item) {
		    return this._Storage.hasOwnProperty(item);
		  },
		  // 获取缓存key-value形式
		  getItem: function (item) {
			// 将json字符串转成对象或数组
		    return JSON.parse(this._Storage.getItem(item));
		  },
		  // 设置缓存key-value形式
		  setItem: function (item,val) {
			// 将对象或数组转成json字符串
		    return this._Storage.setItem(item,JSON.stringify(val));
		  }
};
  1. 查看前端代码可以发现找到隐藏列的规律
    bootstrapTable自定义列本地存储_第1张图片
    找到隐藏列input框,然后进行判断有没有被勾选
var hideColumn = $(".bootstrap-table ul.dropdown-menu").find('input[data-field="remark"]');
var check = hideColumn.is(":checked");
check为true,对应勾选,勾选的是要显示的列
check为false,对应未勾选,未勾选的是要隐藏的列
  1. 通过bootstrap中的onLoadSuccess和onColumnSwitch事件来记录用户的选择
// 表格载入成功事件
onLoadSuccess: function () {
		// 先判断是否支持浏览器缓存和缓存中是否有数据
		// 缓存中有数据时,优先从缓存中读取数据
},

// 表格切换列事件,只要显示或隐藏某列就会触发的函数 
onColumnSwitch: function () {
		// 通过找到隐藏列的规律,将要隐藏的列的field放入到数组中,以key-value的形式存入本地缓存中
},

完整代码

  1. 在公共的js,比如common.js放入全局变量oStorage ,公共的方法loadSuccess和columnSwitch
//本地缓存定义
var oStorage = {
		  _Storage: window.localStorage,
		  // 是否支持缓存
		  isSupportStorage: function () {
		    return this._Storage != undefined ? true : false;
		  },
		  // 是否有缓存
		  hasItem: function (item) {
		    return this._Storage.hasOwnProperty(item);
		  },
		  // 获取缓存key-value形式
		  getItem: function (item) {
			// 将json字符串转成对象或数组
		    return JSON.parse(this._Storage.getItem(item));
		  },
		  // 设置缓存key-value形式
		  setItem: function (item,val) {
			// 将对象或数组转成json字符串
		    return this._Storage.setItem(item,JSON.stringify(val));
		  }
};
$(function() {
	
	
});
// 表格载入成功时执行的函数
function loadSuccess(tid, field) {
	// tid表示表格id,必须独一为二
	// field表示默认要隐藏的列,没有就填“”
    // 第一次载入时没有缓存,默认隐藏的列存入缓存中
    if( !(oStorage.isSupportStorage() && oStorage.hasItem(tid+"BsTable"))) {
    	var aTmpConfig = [field];
    	oStorage.setItem(tid+"BsTable",aTmpConfig);
    } 
    
	// 从本地缓存中获取用户配置
	var aUserConfHideCols = oStorage.getItem(tid+"BsTable");
	if(aUserConfHideCols != "") {
		// 遍历用户配置中的数据
		aUserConfHideCols.forEach(function (sField) {
			// 通过hideColumn方法隐藏列
			$("#" + tid).bootstrapTable('hideColumn', sField);
		}); 
    }
}

// 切换列时执行的函数
function columnSwitch(tid, sId) {
	  // tid表示表格id,必须独一为二
	  // sId表示特定id
	  var aTmpConfig = [];
	  // 找到特定id下的所有input框,遍历,i表示索引,v表示元素
	  $("#" + sId + " .bootstrap-table ul.dropdown-menu").find("input").each(function (i,v) {
	    // 判断未勾选的列,获得字段属性存入定义的数组中
	    if(!$(v).is(':checked')) {
	      aTmpConfig.push($(v).attr("data-field"));
	    } 	  
	  });
	  // 通过setItem方法,以key-value形式存入缓存中
	  oStorage.setItem(tid+"BsTable",aTmpConfig);
}
  1. 在某一个js中使用,比如user.js

找到特定id下input框
bootstrapTable自定义列本地存储_第2张图片

$(function() {
	$('#user_table').bootstrapTable({
		ajax : "ajaxUserRequest",//自定义ajax
		toolbar : '#toolbar', //自定义工具栏
		search : true,//开启搜索文本框
		sidePagination : "server",//使用服务器端分页
		pagination : true,//开启分页
//		clickToSelect : true,//开启点击选中
		singleSelect  : true,// 单选checkbox 
		striped : true,//斑马线表格
		smartDisplay : false, // 显示右下角分页
		pageNumber: 1, //初始化加载第一页,默认第一页
		pageSize: 15,// 每页显示数
		pageList: [15,25,50,'All'],//可供选择的每页记录数
		paginationPreText : '上一页',
		paginationNextText : '下一页',
		showColumns : true,
		onLoadSuccess: function () {
			// 载入成功时执行common.js中loadSuccess方法
			// user_table是表格id
			// 默认隐藏mrn这一列
			loadSuccess("user_table","mrn")
		},
		onColumnSwitch: function () {
		    // 切换列时执行common.js中columnSwitch方法
		    // data_table表示找到此id下的input框,因为列的状态切换不属于表格下的,所以得重新定义一个id
			columnSwitch("user_table","data_table")
		},
		onCheck : checkUserFunction,
		onUncheck : checkUserFunction,
		onClickRow : single_selection,
		columns : data_columns,		
	});
});
  1. 功能部分演示

用户要隐藏mrn这一列
bootstrapTable自定义列本地存储_第3张图片
前端调试发现local Storage缓存,把需要隐藏的列以key-value的形式放入了缓存中
bootstrapTable自定义列本地存储_第4张图片

你可能感兴趣的:(前端,bootstrap,table,记录用户上次的选择)