国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

bootstrap table實現(xiàn)x-editable的行單元格編輯及解決數據Empty和支持多樣式問題

2019-11-19 15:50:59
字體:
來源:轉載
供稿:網友

前言

  • 最近在研究bootstrap table的表格的單元格編輯功能,實現(xiàn)點擊單元格修改內容,其中包括文本(text)方式修改,下拉選擇(select)方式修改,日期(date)格式修改等。
  • 本文著重解決x-editable編輯的數據動態(tài)添加和顯示數據為Empty的問題,還有給表格單元格的內容設置多樣式,使得顯示多樣化。
  • 由于官網給的demo的數據都是html文件里寫好的,select類型的不能動態(tài)添加(所以網上的大多都是官網的類似例子,本篇博客就是在這種情況下以自己的經驗分享給大家,有問題可以留言哦),一旦動態(tài)添加就會出現(xiàn)顯示數據為Empty,我表格原本是有數據的,但是一用這個插件就把數據變成Empty了,這可不是我想要的,所以筆者就自行解決了這個問題。

對比網上的例子

比如以下這種數據不是Empty的例子,但是是由于在html中寫死了數據(awesome),不適合動態(tài)添加。

<a href="#" rel="external nofollow" id="username" data-type="text" data-pk="1">awesome</a><script>$(function(){ $('#username').editable({  url: '/post',  title: 'Enter username' });});</script>

另外一種就是使用bootstrap table動態(tài)添加的,但是select類型就會出現(xiàn)數據為Empty的情況。

$('#db_dependences').bootstrapTable({  method:'POST',  dataType:'json',  contentType: "application/x-www-form-urlencoded",  cache: false,  striped: true,      //是否顯示行間隔色  sidePagination: "client",   //分頁方式:client客戶端分頁,server服務端分頁(*)  showColumns:true,  pagination:true,  minimumCountColumns:2,  pageNumber:1,      //初始化加載第一頁,默認第一頁  pageSize: 10,      //每頁的記錄行數(*)  pageList: [10, 15, 20, 25],  //可供選擇的每頁的行數(*)  uniqueId: "id",      //每一行的唯一標識,一般為主鍵列  showExport: true,       exportDataType: 'all',  exportTypes:[ 'csv', 'txt', 'sql', 'doc', 'excel', 'xlsx', 'pdf'], //導出文件類型  onEditableSave: function (field, row, oldValue, $el) {   $.ajax({    success: function (data, status) {     if (status == "success") {      alert("編輯成功");     }    },    error: function () {     alert("Error");    },    complete: function () {    }   });  },  data: [{   id: 1,   name: '張三',   sex: '男',   time: '2017-08-09'  }, {   id: 2,   name: '王五',   sex: '女',   time: '2017-08-09'  }, {   id: 3,   name: '李四',   sex: '男',   time: '2017-08-09'  }, {   id: 4,   name: '楊朝來',   sex: '男',   time: '2017-08-09'  }, {   id: 5,   name: '蔣平',   sex: '男',   time: '2017-08-09'  }, {   id: 6,   name: '唐燦華',   sex: '男',   time: '2017-08-09'  }],  columns: [{   field: 'id',   title: '序號'  }, {   field: 'name',   title: '姓名',   editable: {    type: 'text',     validate: function (value) {      if ($.trim(value) == '') {       return '姓名不能為空!';      }     }   }   }, {   field: 'sex',   title: '性別',   editable: {    type: 'select',    pk: 1,    source: [     {value: 1, text: '男'},     {value: 2, text: '女'},    ]   }  }, {   field: 'time',   title: '時間',   editable: {    type: 'date',    format: 'yyyy-mm-dd',     viewformat: 'yyyy-mm-dd',     datepicker: {     weekStart: 1    }   }   }] });

結果圖如下:

這里寫圖片描述

由于開源,很快就找到原因,由于formatter我們沒有寫這個function導致調用的默認的formatter,默認的沒有把表格的值傳入html中,bootstrap-table-editable.js源碼如下,初始定義_dont_edit_formatter為false,我們沒有實現(xiàn)noeditFormatter的function就會執(zhí)行第二個if語句,其中的標簽中沒有對內容賦值,導致最后顯示結果為它默認的Empty:

column.formatter = function(value, row, index) {    var result = column._formatter ? column._formatter(value, row, index) : value;    $.each(column, processDataOptions);    $.each(editableOptions, function(key, value) {     editableDataMarkup.push(' ' + key + '="' + value + '"');    });    var _dont_edit_formatter = false;    if (column.editable.hasOwnProperty('noeditFormatter')) {     _dont_edit_formatter = column.editable.noeditFormatter(value, row, index);    }    if (_dont_edit_formatter === false) {     return ['<a href="javascript:void(0)" rel="external nofollow" rel="external nofollow" rel="external nofollow" ',      ' data-name="' + column.field + '"',      ' data-pk="' + row[that.options.idField] + '"',      ' data-value="' + result + '"',      editableDataMarkup.join(''),      '>' + '</a>'     ].join('');    } else {     return _dont_edit_formatter;    }   };

由于要實現(xiàn)多樣式,則把上面的代碼改變,并在使用的時候實現(xiàn)noeditFormatter:function(value){…}就是了。將上面的代碼改為如下(此為我自己改的,你可以根據自己的需要做修改):

column.formatter = function(value, row, index) {    var result = column._formatter ? column._formatter(value, row, index) : value;    $.each(column, processDataOptions);    $.each(editableOptions, function(key, value) {     editableDataMarkup.push(' ' + key + '="' + value + '"');    });    var _dont_edit_formatter = false;    if (column.editable.hasOwnProperty('noeditFormatter')) {     var process = column.editable.noeditFormatter(value, row, index);     if(!process.hasOwnProperty('class')){      process.class = '';     }     if(!process.hasOwnProperty('style')){      process.style = '';     }     _dont_edit_formatter = ['<a href="javascript:void(0)" rel="external nofollow" rel="external nofollow" rel="external nofollow" ',      ' data-name="'+process.filed+'"',      ' data-pk="1"',      ' data-value="' + process.value + '"',      ' class="'+process.class+'" style="'+process.style+'"',      '>' + process.value + '</a>'     ].join('');    }    if (_dont_edit_formatter === false) {     return ['<a href="javascript:void(0)" rel="external nofollow" rel="external nofollow" rel="external nofollow" ',      ' data-name="' + column.field + '"',      ' data-pk="' + row[that.options.idField] + '"',      ' data-value="' + result + '"',      editableDataMarkup.join(''),      '>' + value + '</a>'     ].join('');    } else {     return _dont_edit_formatter;    }   };

結果如下:

這里寫圖片描述

這里寫圖片描述

然后是bootstrap table的使用js文件,在其中實現(xiàn)noeditFormatter函數。返回的result必須包含filed和value,class和style可以不需要,class可以額外用其它插件之類,比如badge,style是增加樣式(背景,顏色,字體等)。

$('#db_dependences').bootstrapTable({  method:'POST',  dataType:'json',  contentType: "application/x-www-form-urlencoded",  cache: false,  striped: true,        //是否顯示行間隔色  sidePagination: "client",   //分頁方式:client客戶端分頁,server服務端分頁(*)  showColumns:true,  pagination:true,  minimumCountColumns:2,  pageNumber:1,      //初始化加載第一頁,默認第一頁  pageSize: 10,      //每頁的記錄行數(*)  pageList: [10, 15, 20, 25],  //可供選擇的每頁的行數(*)  uniqueId: "id",      //每一行的唯一標識,一般為主鍵列  showExport: true,       exportDataType: 'all',  exportTypes:[ 'csv', 'txt', 'sql', 'doc', 'excel', 'xlsx', 'pdf'], //導出文件類型  onEditableSave: function (field, row, oldValue, $el) {   $.ajax({    success: function (data, status) {     if (status == "success") {      alert("編輯成功");     }    },    error: function () {     alert("Error");    },    complete: function () {    }   });  },//  onEditableHidden: function(field, row, $el, reason) { // 當編輯狀態(tài)被隱藏時觸發(fā)//   if(reason === 'save') {//    var $td = $el.closest('tr').children();//   // $td.eq(-1).html((row.price*row.number).toFixed(2));//   // $el.closest('tr').next().find('.editable').editable('show'); //編輯狀態(tài)向下一行移動//   } else if(reason === 'nochange') {//    $el.closest('tr').next().find('.editable').editable('show');//   }//  },  data: [{   id: 1,   name: '張三',   sex: '男',   time: '2017-08-09'  }, {   id: 2,   name: '王五',   sex: '女',   time: '2017-08-09'  }, {   id: 3,   name: '李四',   sex: '男',   time: '2017-08-09'  }, {   id: 4,   name: '楊朝來',   sex: '男',   time: '2017-08-09'  }, {   id: 5,   name: '蔣平',   sex: '男',   time: '2017-08-09'  }, {   id: 6,   name: '唐燦華',   sex: '男',   time: '2017-08-09'  }, {   id: 7,   name: '馬達',   sex: '男',   time: '2017-08-09'  }, {   id: 8,   name: '趙小雪',   sex: '女',   time: '2017-08-09'  }, {   id: 9,   name: '薛文泉',   sex: '男',   time: '2017-08-09'  }, {   id: 10,   name: '丁建',   sex: '男',   time: '2017-08-09'  }, {   id: 11,   name: '王麗',   sex: '女',   time: '2017-08-09'  }],  columns: [{   field: 'id',   title: '序號'  }, {   field: 'name',   title: '姓名',   editable: {    type: 'text',     validate: function (value) {      if ($.trim(value) == '') {       return '姓名不能為空!';      }     }   }   }, {   field: 'sex',   title: '性別',   editable: {    type: 'select',    pk: 1,    source: [     {value: 1, text: '男'},     {value: 2, text: '女'},    ],    noeditFormatter: function (value,row,index) {     var result={filed:"sex",value:value,class:"badge",style:"background:#333;padding:5px 10px;"};     return result;    }   }  }, {   field: 'time',   title: '時間',   editable: {    type: 'date',    format: 'yyyy-mm-dd',     viewformat: 'yyyy-mm-dd',     datepicker: {     weekStart: 1    },    noeditFormatter: function (value,row,index) {     var result={filed:"time",value:value,class:"badge",style:"background:#333;padding:5px 10px;"};     return result;    }   }   }] });

關于bootstrap table的導出及使用可以看我另外一篇博客。

下載和引用

下載x-editable,并如下引用。

<link href="js/bootstrap_above/x-editable-develop/dist/bootstrap-editable/css/bootstrap-editable.css" rel="external nofollow" rel="stylesheet">  <script src="js/bootstrap_above/x-editable-develop/dist/bootstrap-editable/js/bootstrap-editable.js"></script>  <script src="js/bootstrap_above/bootstrap-table-develop/dist/extensions/editable/bootstrap-table-editable.js"></script>

然后講上訴的一些文件修改添加,就完成了。

另外項目的結果展示

這里寫圖片描述

這里寫圖片描述

其中的樣式都是自行在x-editable的基礎上添加的。如配置出問題,以下是源碼鏈接。

源碼下載

總結

以上所述是小編給大家介紹的bootstrap table實現(xiàn)x-editable的行單元格編輯及解決數據Empty和支持多樣式,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 龙胜| 隆德县| 米脂县| 思南县| 崇信县| 霍山县| 庄河市| 定州市| 平乡县| 辉南县| 正镶白旗| 南溪县| 巧家县| 天柱县| 澄江县| 大同县| 黄骅市| 广西| 天全县| 陆河县| 宿松县| 酉阳| 凤阳县| 穆棱市| 黄骅市| 锡林郭勒盟| 青铜峡市| 绥滨县| 南岸区| 富蕴县| 梁山县| 桓仁| 宣武区| 浦城县| 东乌珠穆沁旗| 盘山县| 泰顺县| 巴塘县| 察哈| 无极县| 抚顺县|