เพื่อให้ TabulatorPlus ฉลาดขึ้นและจัดการตัวเองได้ง่ายขึ้นในทุก Framework การเพิ่ม Method สำหรับอัปเดต (Update) ข้อมูลและสถานะตารางเป็นไอเดียที่ดีมากครับ
นี่คือวิธีเพิ่ม Method update และ Method เสริมอื่น ๆ ที่จะช่วยให้คุณควบคุมตารางได้จากภายนอกแบบ Clean Code ครับ
Class TabulatorPlus
import { TabulatorFull as Tabulator } from 'tabulator-tables';
export default class TabulatorPlus extends Tabulator {
constructor(el, userConfig = {}, storageKey = null) {
const defaultConfig = {
layout: "fitColumns",
movableColumns: true,
pagination: "local",
paginationSize: 10,
paginationSizeSelector: [10, 25, 50, 100],
persistence: storageKey ? {
filter: true,
page: true,
sort: true
} : false,
persistenceID: storageKey,
placeholder: "No Data Available",
resizableRows: true,
responsiveLayout: "collapse"
};
const finalConfig = { ...defaultConfig, ...userConfig };
super(el, finalConfig);
}
/**
* 1. Method for updating new data
* @param {Array} newData - New dataset to display
*/
refreshData(newData) {
if (newData && Array.isArray(newData)) {
// Use the original Tabulator's setData
return this.setData(newData);
}
return Promise.reject("Invalid data format");
}
/**
* 2. Method to force redraw the table (e.g. when resizing or opening a modal)
*/
forceRedraw() {
// redraw(true) will resize columns to fit the current container
this.redraw(true);
}
/**
* 3. Method to clear all filters
*/
resetFilters() {
this.clearFilter(true);
this.clearHeaderFilter();
}
}
💡 ทำไมต้องมี Method เหล่านี้ ?
การสืบทอด ( extends ) มาจาก Tabulator ทำให้คุณเรียกใช้ฟังก์ชันดั้งเดิมอย่าง .setData() ได้อยู่แล้ว แต่การสร้าง Method ครอบไว้ ( Wrapper Methods ) มีข้อดีคือ
- Semantic Meaning: ชื่อฟังก์ชันอย่าง
refreshData()สื่อสารความหมายได้ชัดเจนกว่าในเชิงธุรกิจ - Safety Check: คุณสามารถดักจับ Error หรือเช็คประเภทข้อมูล ( Validation ) ก่อนส่งให้ Library หลักทำงานได้ ( ป้องกันแอปพัง )
- One-Stop Service: หากในอนาคตคุณอยากให้ทุกครั้งที่อัปเดตข้อมูล ต้องมีการ log ค่า หรือเปลี่ยนสี Header คุณก็แค่มาแก้ที่
refreshDataในไฟล์เดียว
ตัวอย่างการเรียกใช้งาน ( Universal Style )
ไม่ว่าคุณจะใช้ Framework ไหน การเรียกใช้จะดูเป็นระเบียบขึ้นมากครับ
// สร้าง Instance
const myTable = new TabulatorPlus("#table-id", {}, "user-123");
// เมื่อได้รับข้อมูลใหม่จาก API
api.getData().then(data => {
myTable.refreshData(data); // เรียกผ่าน Method ที่เราสร้างใหม่
});
// เมื่อ User กดปุ่ม "ล้างค่าการค้นหา"
$("#btn-reset").on("click", () => {
myTable.resetFilters();
});
อ่านเพิ่มเติม
