第三章:快速上手:你的第一個 Skin

撰寫 main.js (見證 SDK 的魔法)

這是整個教學中最能體現 MoriForms SDK 價值的環節。

MoriForms 核心插件會自動為您載入 SDK 和 WordPress 內建的 jQuery。您會驚訝地發現,要讓一個功能完整的表單運作起來,您真正需要編寫的程式碼可能 只有一行

我們提供了三種風格的範例,從極簡到完整,您可以根據需求選擇:


選項一:極致精簡版 (Hello, MoriForms!)

這個版本是為那些想立即看到成果的開發者準備的。它展示了在最理想的情況下,您需要編寫的全部程式碼。

JavaScript (main.js - 極致精簡版)

JavaScript

jQuery(function($) {
    // 就是這一行!SDK 會處理一切。
    window.MoriForms?.init();
});

是的,您沒有看錯。只要這一行,SDK 就會自動尋找 moriformsData,並初始化頁面上的所有表單,包括欄位渲染、驗證規則綁定、以及處理 AJAX 提交的全部邏輯。

註:?. (這個問號是「Optional Chaining」) 這是一個安全寫法,確保在 MoriForms 物件不存在時,也不會報錯。

這個版本最適合:

  • 快速驗證您的 schema.jsontemplate.html 是否設定正確。
  • 您的 Skin 不需要任何額外的、自訂的 JavaScript 互動。

選項二:jQuery 標準版 (推薦熟悉 WordPress 的開發者)

這個版本在「極致精簡版」的基礎上,增加了事件監聽的範例。它讓您在享受 SDK 便利的同時,也能輕鬆地為 Skin 注入自訂的互動邏輯。

JavaScript (main.js - jQuery 版)

JavaScript

jQuery(function ($) {
    // 安全檢查:這是一個好習慣,確保在執行後續操作前 SDK 已就緒
    if (typeof window.MoriForms === 'undefined') {
        console.error('MoriForms SDK not found. Aborting initialization.');
        return;
    }

    // 1. 核心初始化指令
    MoriForms.init();

    // 2. (可選) 為所有表單添加自訂互動
    if (typeof moriformsData !== 'undefined' && moriformsData.forms) {
        $.each(moriformsData.forms, function(formIdStr) {
            const formInstance = MoriForms.get(parseInt(formIdStr, 10));

            if (formInstance) {
                // 範例:在表單提交成功後,跳出一個 alert 視窗
                formInstance.on('submit:success', function (response) {
                    console.log(`[jQuery] 表單 ${this.id} 提交成功!`, response);
                    alert('太棒了!您的訊息已成功送出!');
                });
            }
        });
    }
});

選項三:原生 JavaScript 現代版 (推薦追求無依賴的開發者)

這個版本功能與 jQuery 版完全相同,但採用了現代的 ES6+ 原生語法,不依賴任何函式庫,是追求極致效能和現代化開發流程的開發者的首選。

JavaScript (main.js - 原生 JS 版)

JavaScript

document.addEventListener('DOMContentLoaded', () => {
    // 安全檢查:這是一個好習慣,確保在執行後續操作前 SDK 已就緒
    if (typeof window.MoriForms === 'undefined') {
        console.error('MoriForms SDK not found. Aborting initialization.');
        return;
    }

    // 1. 核心初始化指令
    MoriForms.init();

    // 2. (可選) 為所有表單添加自訂互動
    if (typeof moriformsData !== 'undefined' && moriformsData.forms) {
        for (const formIdStr of Object.keys(moriformsData.forms)) {
            const formInstance = MoriForms.get(parseInt(formIdStr, 10));

            if (formInstance) {
                // 範例:在表單提交成功後,跳出一個 alert 視窗
                formInstance.on('submit:success', (response) => {
                    console.log(`[Vanilla JS] 表單 ${formInstance.id} 提交成功!`, response);
                    alert('太棒了!您的訊息已成功送出!');
                });
            }
        }
    }
});

本頁目錄