โค้ดตัวอย่างนี้เป็นเว็บเพจแบบ Single Page Application (SPA) ที่ผสมผสาน LitElement สำหรับสร้าง component แบบ reusable และ Google Apps Script สำหรับดึงข้อมูลจาก Google Sheets พร้อมระบบ routing และ dynamic template บนหน้าเว็บ
1. โครงสร้าง HTML หลัก
<header>และ<footer>เป็นพื้นที่สำหรับ component แบบ reusable<main>เป็น container สำหรับเนื้อหาหลักของแต่ละหน้า SPA<div id="spinner">ใช้แสดง loading indicator ระหว่างดึงข้อมูล<div id="app">เป็นพื้นที่หลักที่เราจะ render content ของแต่ละ page
2. การโหลด Bootstrap และ CSS
- ใช้ Bootstrap 5.3 เพื่อทำให้หน้าตาสวยงามแบบ responsive
nav a.activeกำหนดสีและ font-weight ของเมนูที่ถูกเลือก.spinnerซ่อนโดย default และจัดให้อยู่ตรงกลางmainกำหนดความสูงขั้นต่ำ เพื่อให้ layout สวยงามแม้ข้อมูลน้อย
3. Import Lit Bundle แบบครบทุกอย่าง
- ใช้ Lit’s all-in-one bundle (
lit-all.min.js) รวม directives และฟังก์ชันทั้งหมด htmlใช้สร้าง template literalsrenderใช้ render template ลงใน DOMLitElementสำหรับสร้าง custom elementcssสำหรับ styling ของ componentunsafeHTMLสำหรับ render HTML string ที่มาจาก server (ต้องระวัง XSS)
4. Header Component
- สร้าง navbar แบบ Bootstrap
- ใช้ hash URL เช่น
#home,#about,#dataสำหรับ routing SPA - ใช้
renderเพื่อ render header ลง<header id="header">
5. Footer Component
- Footer แบบง่าย ๆ
- render ลง
<footer id="footer">
6. LitElement Component สำหรับตารางข้อมูล
การทำงานของ component:
- properties: กำหนด
rowsเป็น array - styles: กำหนด CSS ของตาราง
- connectedCallback(): เรียก
loadData()หลัง component ถูก mount - loadData(): เรียก
google.script.run.getSheetData()เพื่อดึงข้อมูลจาก Google Sheet - render(): แสดงตาราง หรือข้อความ “กำลังโหลดข้อมูล...”
7. ระบบ Router
การทำงาน:
1. route(): ตรวจสอบ hash ใน URL และโหลดหน้าให้ตรงกับ hash2. loadPage(page):
- แสดง spinner
- ล้างเนื้อหาเดิม
- เรียก
google.script.run.getTemplate(page)เพื่อดึง HTML ของ page จาก Google Apps Script - render HTML ลง
<div id="app"> - อัปเดต class
activeของเมนู navbar
8. การเชื่อมต่อ Google Apps Script
- ฟังก์ชันสำคัญจากฝั่ง GAS:
getSheetData()→ คืนค่า array ของ objects จาก Google SheetgetTemplate(page)→ คืนค่า HTML string ของแต่ละ page- ทำให้หน้าเว็บ ไม่ต้องโหลดใหม่ทั้งหมด และ อัปเดตเนื้อหาแบบ dynamic
9. จุดเด่นของระบบนี้
- SPA Hybrid: ใช้ LitElement สำหรับ component + Google Apps Script เป็น backend
- Reusable Components: header, footer, table สามารถ reuse ได้
- Dynamic Table: ตารางดึงจาก Google Sheet โดยตรง และ render ด้วย LitElement
- Routing แบบ Hash: ไม่ต้อง reload page ทั้งหมด
- Bootstrap Styling: หน้าเว็บสวยและ responsive พร้อม spinner
- Loading & Error Handling: มี spinner และ alert หากโหลด page ไม่สำเร็จ
10. Code.gs
สรุป
โค้ดนี้เป็นตัวอย่าง Google Apps Script SPA แบบครบวงจร
- ผสม LitElement และ Bootstrap
- ใช้ google.script.run ดึงข้อมูลและ template
- ระบบ hash router ทำให้หน้าเว็บเปลี่ยน content แบบ dynamic
- รองรับ componentization (header/footer/table)
- มี loading indicator และ error handling
เหมาะกับเว็บแอปที่ต้อง เชื่อม Google Sheets เป็น backend และต้องการ SPA ที่เบาและโมดูลาร์