สำหรับการใช้งานร่วมกับ jQuery นั้น จะมีความตรงไปตรงมาสูงมาก เพราะ Tabulator ถูกออกแบบมาให้ทำงานกับ DOM โดยตรงได้ดีอยู่แล้วครับ
ในโลกของ jQuery เราจะเก็บ Instance ไว้ในตัวแปรธรรมดา หรือจะใช้ .data () ของ jQuery เพื่อผูก Instance ไว้กับ Element นั้น ๆ ก็ได้ เพื่อให้เรียกใช้ซ้ำได้จากทุกที่ครับ
$ (document) .ready (function () { // 1. กำหนดตัวแปรสำหรับเก็บ Instance (Reused Instance) let tableInstance = null; const $tableEl = $ ("#my-table") ; // --- FUNCTION: INITIALIZE (การสร้างครั้งแรก) --- function initTable (initialData) { // ตรวจสอบเพื่อไม่ให้สร้างซ้อน (Idempotent) if (tableInstance) return; tableInstance = new TabulatorPlus ($tableEl[0], { data: initialData, columns: [ { title: "ID", field: "id", width: 50 }, { title: "Product", field: "product", width: 200 }, { title: "Price", field: "price", formatter: "money" }, ], }, "jquery-storage-key") ; // หรือจะเก็บไว้ใน jQuery Data เพื่อเรียกใช้จากที่อื่นก็ได้ $tableEl.data ("tabulator-instance", tableInstance) ; } // --- FUNCTION: REFRESH (อัปเดตข้อมูล) --- window.refreshTableData = function (newData) { if (tableInstance) { console.log ("Refreshing data...") ; // ใช้ .setData () เพื่ออัปเดตข้อมูลโดยไม่ต้องวาดตารางใหม่ทั้งหมด tableInstance.setData (newData) ; } }; // --- FUNCTION: ACTION (เรียกใช้ Method) --- $ ("#btn-clear-filter") .on ("click", function () { if (tableInstance) { tableInstance.clearFilter (true) ; } }) ; // --- FUNCTION: UNMOUNT / DESTROY (การล้างข้อมูล) --- window.destroyTable = function () { if (tableInstance) { console.log ("Destroying table...") ; // ล้าง Event และ DOM ที่ Tabulator สร้างขึ้น tableInstance.destroy () ; tableInstance = null; $tableEl.removeData ("tabulator-instance") ; } }; // ทดลองรัน initTable ([ { id: 1, product: "Laptop", price: 35000 }, { id: 2, product: "Mouse", price: 1200 } ]) ;
}) ;
💡 คำอธิบายสำหรับการใช้งานแบบ jQuery
- Reused Instance: ผมแนะนำให้ใช้ตัวแปรแบบ
letในขอบเขต ที่เหมาะสม หรือใช้$el.data ('name', instance)ซึ่งเป็นท่ามาตรฐานของ jQuery Plugin เพื่อให้ฟังก์ชันอื่น ๆ ในหน้าเว็บสามารถเข้าถึง Instance เดียวกันได้ - Refresh: การเรียก
tableInstance.setData (data)ใน jQuery จะทำงานได้เร็วมาก และช่วยรักษาสถานะการเลื่อน ของผู้ใช้ไว้ได้ - Unmount / Destroy: ใน jQuery มักจะไม่ค่อยมีการ Unmount อัตโนมัติเหมือน Framework สมัยใหม่ ดังนั้นควรเรียก
.destroy ()เมื่อคุณทำการลบ Element นั้นทิ้งด้วย.remove ()เพื่อป้องกัน Memory Leak ครับ - Accessing DOM: สังเกตว่าผมส่ง
$tableEl[0]เข้าไปใน Constructor เพราะTabulatorPlusต้องการ Pure DOM Element ไม่ใช่ jQuery Object ครับ
เปรียบเทียบภาพรวม
| ฟีเจอร์ | Framework | jQuery |
| Lifecycle | จัดการผ่าน Hooks | จัดการเองด้วยฟังก์ชัน |
| Data Binding | อัปเดตผ่าน Props / Watch | อัปเดตผ่านฟังก์ชัน setData () |
| State | เก็บใน Component State / Ref | เก็บในตัวแปร Global หรือ .data () |
การทำ Wrapper แบบ TabulatorPlus นี้ช่วยให้คุณเขียนโค้ด jQuery ได้สะอาดขึ้นมาก เพราะไม่ต้องใส่ Config ยาว ๆ ทุกครั้งที่สร้างตารางครับ
อ่านเพิ่มเติม