前端:多個datatables用dataTables.altEditor.free.js組件使用填坑

前言

Datatables是一款jquery表格插件乓梨。它是一個高度靈活的工具,可以將任何HTML表格添加高級的交互功能事富。

DataTables中文網
DataTables英文網(資料更多)
IT狗窩

Editor

Editor是官方提供的表格編輯寬展組件。
優(yōu)點:一大堆;
缺點:付費哮内,破解版一般是老版本
今天主角不是官方的組件,所以跳過壮韭。

DataTables.AltEditor(免費北发,開源)

DataTables最低兼容版本1.10.8

原作者Github
bug修復版

提供簡單的添加、編輯和刪除Buttons喷屋,只需要簡單的設置即可:

var availableButtons = [
    {text: '添加', name: 'add'},
    {extend: 'selected', text: '編輯', name: 'edit'},
    {extend: 'selected', text: '刪除', name: 'delete'}
  ];
$(tableId).dataTable({
      columnDefs: columnHeader,
      data: data.data,
      altEditor: true,     // 必須設置為true
      dom: "Bfrtip",
      buttons: availableButtons,
      onAddRow: function (datatable, rowdata, success, error) {
          //點擊添加Button觸發(fā)事件
      },
      onDeleteRow: function (datatable, rowdata, success, error) {
         /點擊刪除Button觸發(fā)事件
      },
      onEditRow: function (datatable, rowdata, success, error) {
          //點擊編輯Button觸發(fā)事件
      }
    })

Bug分析

原作者的AltEditor寫的很好了(愛動手造輪子的都是好孩子)琳拨,在一個DataTable情況下,沒發(fā)現(xiàn)Bug屯曹,如果是初始化了多個DataTable狱庇,其中任意一個DataTable點擊添加(編輯或刪除),所有DataTable都會觸發(fā)onAddRow(onEditRow或onDeleteRow)是牢,這點我開始沒注意僵井,后來才發(fā)現(xiàn)的陕截。

這個Bug可是夠大了驳棱,于是開始各種找,最后花了兩天各種調試才找到农曲。

首先點擊添加(編輯或刪除)都會彈出窗口(div)社搅,但是,每個DataTable彈出的窗口中button都相同乳规,做事件綁定時就會把所有相同id的button綁定上這個事件形葬。也就是說,初始化DataTable很多暮的,一次觸發(fā)次數(shù)也會很多笙以。

繼續(xù)找問題

以一段代碼為例

$('#altEditor-modal').on('show.bs.modal', function () {
         var btns = '<button type="button" data-content="remove" class="btn btn-default" data-dismiss="modal">關閉</button>' +
           '<button type="button" data-content="remove" class="btn btn-primary" id="editRowBtn" >提交更改</button>';
         $('#altEditor-modal').find('.modal-title').html('編輯記錄');
         $('#altEditor-modal').find('.modal-body').html(data);
         $('#altEditor-modal').find('.modal-footer').html(btns);
       });

id="editRowBtn" 這個東西萬年不變。源代碼那些操作提交按鈕都是寫死的ID冻辩。

動手解決

好了猖腕,問題就是id重復了,那怎么辦恨闪?在AltEditor庫中為了區(qū)分不同DataTable倘感,有一個叫做 namespace 的屬性,一個叫做 _instance 每綁定一個DataTable就會有一個全局變量自加1咙咽,namespace 就是字符串 “.altEditor"+_instance老玛。

  var _instance = 0;
  var altEditor = function (dt, opts) {
    //省略一萬字
    this.s = {
      dt: new DataTable.Api(dt),
      namespace: '.altEditor' + (_instance++)
    };
   //省略一萬字
  }

這樣能保證他知道哪個是當前操作的DataTable。
我們把id="editRowBtn"變成id="editRowBtn"+namespace,這樣就保證唯一性了蜡豹。
在不同的方法內找到namespace的變量不太一樣麸粮, this.s.namespace或者 that.s.namespace。
替換所有需要id的地方十幾處余素。

大功告成豹休?

namespace:".altEditor"+_instance,這個有問題桨吊,namespace字符串雖然拼在了id后面威根,但是因為包含一個點,導致提交事件不觸發(fā)视乐,所以最后應該是namespace:“altEditor"+_instance就行了洛搀。

部分改造代碼

var btns = '<button type="button" data-content="remove" class="btn btn-default" data-dismiss="modal">關閉</button>' +
            '<button type="button" data-content="remove" class="btn btn-primary" id="editRowBtn' + that.s.namespace + '" >提交更改</button>';

 _editRowCallback: function (response, status, more) {
        $("div#altEditor-modal").find("button#editRowBtn" + this.s.namespace).prop('disabled', true);
      }

開發(fā)中的開源項目:遠程數(shù)據(jù)調試

1.png

9.png

小期待

以下項目都是我圍繞遠程控制寫的項目和子項目。都給star一遍吧佑淀。??

項目(Github) 語言 其他地址 運行環(huán)境 項目說明
RemoteDataControllerForWeb JavaScript 簡書 瀏覽器 遠程數(shù)據(jù)調試控制臺Web端
RemoteDataControllerForAndroid Java 簡書 Android設備 遠程數(shù)據(jù)調試Android端
RemoteDataControllerForServer Java 簡書 運行Java的設備 遠程數(shù)據(jù)調試Server端
MiniHttpClient Java 簡書 運行Java的設備 精簡的HttpClient
MiniHttpServer Java 簡書 運行Java的設備 支持部分Http協(xié)議的Server
MiniTCPClient Java 簡書 運行Java的設備 TCP長連接庫留美,支持粘包拆包處理
PackageMessage Java 簡書 運行Java的設備 TCP粘包與半包解決方案
ByteBuffer Java 簡書 運行Java的設備 二進制處理工具類
DataTables.AltEditor JavaScript 簡書 瀏覽器 Web端表格編輯組件

我的小站:IT狗窩
技術聯(lián)系QQ:1264957104

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市伸刃,隨后出現(xiàn)的幾起案子谎砾,更是在濱河造成了極大的恐慌,老刑警劉巖捧颅,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件景图,死亡現(xiàn)場離奇詭異,居然都是意外死亡碉哑,警方通過查閱死者的電腦和手機挚币,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來扣典,“玉大人妆毕,你說我怎么就攤上這事≈猓” “怎么了笛粘?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長湿硝。 經常有香客問我薪前,道長,這世上最難降的妖魔是什么图柏? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任序六,我火速辦了婚禮,結果婚禮上蚤吹,老公的妹妹穿的比我還像新娘例诀。我一直安慰自己随抠,他們只是感情好,可當我...
    茶點故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布繁涂。 她就那樣靜靜地躺著拱她,像睡著了一般。 火紅的嫁衣襯著肌膚如雪扔罪。 梳的紋絲不亂的頭發(fā)上秉沼,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天,我揣著相機與錄音矿酵,去河邊找鬼唬复。 笑死,一個胖子當著我的面吹牛全肮,可吹牛的內容都是我干的敞咧。 我是一名探鬼主播,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼辜腺,長吁一口氣:“原來是場噩夢啊……” “哼休建!你這毒婦竟也來了?” 一聲冷哼從身側響起评疗,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤测砂,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后百匆,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體砌些,經...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年胧华,在試婚紗的時候發(fā)現(xiàn)自己被綠了寄症。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宙彪。...
    茶點故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡矩动,死狀恐怖,靈堂內的尸體忽然破棺而出释漆,到底是詐尸還是另有隱情悲没,我是刑警寧澤,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布男图,位于F島的核電站示姿,受9級特大地震影響,放射性物質發(fā)生泄漏逊笆。R本人自食惡果不足惜栈戳,卻給世界環(huán)境...
    茶點故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望难裆。 院中可真熱鬧子檀,春花似錦镊掖、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至缩歪,卻和暖如春归薛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背匪蝙。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工主籍, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人逛球。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓崇猫,卻偏偏與公主長得像,于是被迫代替她去往敵國和親需忿。 傳聞我的和親對象是個殘疾皇子诅炉,可洞房花燭夜當晚...
    茶點故事閱讀 44,629評論 2 354