Collapse
Collapse 用於把相關內容整理成可展開、可收合的區域。你可以手動維護固定面板,也可以從模型或後端 API 取得記錄,再用同一個項目範本重複產生面板。
1. 選擇內容模式
| 模式 | 適用情境 | 內容來源 |
|---|---|---|
| Static | 面板數量和結構固定 | 新增並編排 CollapsePanel |
| Data Source | 面板代表同一類型的記錄 | 一個 Data Source 與一個 Item Template |
既有頁面 JSON 沒有 Content Mode 時,屬性面板會自動顯示 Static,Runtime 也會以 Static 運作,不需要遷移。
本手冊使用三個互補範例。下方截圖和設定步驟已包含重現所需資訊,不要求讀者存取 Spark Sample 應用程式:
- Onboarding Checklist:明確設定
Content Mode = Static,四個面板分別承載不同的唯讀表單,用來說明靜態結構、預設展開和元件函數。 - Frequently Asked Questions:設定
Content Mode = Data Source,從/spark/api/sample/collapse/faqs讀取記錄,並透過 FAQ Item Template 動態產生面板,用來說明 Test、欄位映射、分頁、Current Record 和開發態預覽資料。 - Support Answers with Custom Content:重用同一資料來源,並在每個動態面板中重複顯示頁面 Content,用來說明共享內容與
record.*綁定。
2. 靜態模式
- 從 Containers 將 Collapse 拖入頁面。
- 保持 Content Mode = Static。
- 在 Collapse Panels 中新增項目並拖曳排序。
- 設定 Title、Description、Icon、預設展開、Disabled 和 Trigger Area。
- 把 Form、Panel 或其他內容放入面板。
外層可設定 Single Panel Mode、Show Border、Transparent Style、Size 和 Arrow Position。Trigger Area 建議使用 Header;此時整列標題區域(包括右側空白處)都可點擊展開或收合。若選擇 Icon,則只有箭頭可以觸發。Disabled 面板在 Design Mode 中仍可選取和編輯。
3. 資料驅動模式
3.1 設定資料來源
- 選擇 Content Mode = Data Source。
- 指定
id或code等 Row Unique Key。每筆記錄都必須存在且唯一。 - 設定 Items Per Request 和 Empty State Text。
- 設定模型或 Custom URL,以及 URL、Method、Rows Path、Total Path、Record Fields。
- 按一下 Test。Test 與 Design Preview、Runtime 使用相同的請求和回應解析,也會檢查唯一鍵缺漏或重複。
建議回應:
{
"success": true,
"data": {
"total": 6,
"current": 1,
"pageSize": 4,
"records": [{
"id": "invite-team",
"category": "Getting started",
"question": "When should I invite the wider team?",
"answer": "Invite the team after access rules are ready.",
"disabled": false,
"defaultExpanded": true
}]
}
}
Rows Path 使用 data.records,Total Path 使用 data.total。
3.2 選擇 Item Template
操作方式和 CardSet 一致:按一下 Item Template 的編輯按鈕,在範本庫中選擇範本,再於同一個對話框設定欄位參數。
在 Content 中設定標題、說明、內文、分類或徽標;在 Behavior 中視需要對應 Icon、Visible、Disabled 和 Default Expanded。三種範本共用同一套行為規則。
| 範本 | 適用情境 | 主要對應 |
|---|---|---|
| FAQ | 說明中心 | Title、Answer、Category、Answer Format |
| Record Summary | 業務記錄 | Title、Description、Content、Badge |
| Custom Content | 自訂版面 | 標題與行為欄位,以及頁面 Content 引用 |
Live Preview 可以切換 Preview Record 或重新載入真實預覽資料。Save 才會儲存草稿;Cancel、關閉和 Escape 都不會修改目前範本。
3.3 使用 Content 編排自訂內容
Content 是頁面內可重複使用的內容資源,不是 Form,也不是藏在 Collapse 裡的子畫布。Page Resources 分為 Popups 和 Contents。開啟 Content 後會從畫布右側滑出寬版設計抽屜,並保留左側元件庫與右側屬性面板。可按標題列關閉按鈕、點擊抽屜外區域、按 Back to page,或按 Escape 返回。
Custom Content 可選擇既有 Content,或使用 Create Content、Edit Content、Unlink Content。解除關聯只移除目前 Collapse 的引用。同一 Content 可被多處共用,修改會同步套用到所有引用;仍被引用的 Content 不能刪除。子控制項不需要參數對應,可直接讀取 record.*。舊 Item Template panels 會在首次載入或儲存時自動提升為 Content。
3.4 設計預覽與 Runtime
- Design Preview 與 Runtime 使用同一個渲染器。
- 預覽只請求一頁;沒有真實資料時顯示明確標記的 Sample Record。
- 初次載入顯示骨架;空白與錯誤狀態清楚呈現,錯誤可 Retry。
- Runtime 有更多資料時顯示 Load more,且同時只執行一個載入請求。
- 重新載入後保留仍存在的展開鍵。
- Runtime 略過無效鍵;Test 將其顯示為設定錯誤。
4. 互動
Static 支援 Collapse onChange 與 CollapsePanel onClick;Data Source 支援 Collapse onChange 與 Item Template onClick。
切換動態項目時,Spark 先寫入 Current Record,再執行 Item Template onClick,最後執行 Collapse onChange。動作可以讀取 record.* 與:
collapse.activeKeys
collapse.expandedCount
collapse.changedKey
collapse.changedIndex
collapse.changedNumber
collapse.changedRecord
collapse.expanded
collapse.accordion
collapse.contentMode
Toast 範例:FAQ: [[record.question]]。
5. 元件函數
| 函數 | 行為 |
|---|---|
expandAll | 展開可用項目;Single Panel Mode 只保留第一項 |
collapseAll | 收合全部項目 |
resetPanels | 還原預設展開狀態 |
reloadCollapse | 重新載入資料並協調展開鍵 |
setCollapseData(data) | 用先前動作提供的陣列取代資料 |
6. 請求內容
Test、Design Preview、Runtime 都會自動傳送:
X-Spark-Page-Environment: DEV | TEST | PROD
X-Spark-Page-Render-Mode: DESIGN_PREVIEW | RUNTIME
請勿手動新增。另請參閱頁面請求內容與後端除錯。Spark Sample 使用 /spark/api/sample/collapse/faqs,後端以 SparkPageRequestHeaders.resolve(environment, renderMode) 解析內容,並可在 DESIGN_PREVIEW 回傳確定的開發資料。
7. 重現範例
7.1 靜態開通檢查清單
- 新增 Collapse,保持 Static,並關閉 Single Panel Mode。
- 新增四個 CollapsePanel,分別放入不同的唯讀 Form。
- 第一項開啟 Expanded by Default。
- 新增三個按鈕,分別呼叫
expandAll、collapseAll、resetPanels。
7.2 動態 FAQ
- 選擇 Data Source、Single Panel Mode 和 Transparent Style。
- Row Unique Key 填
id,Items Per Request 設為4。 - 使用
/spark/api/sample/collapse/faqs、POST、data.records、data.total。 - 按 Test,再選擇 FAQ 範本。
- 對應 question、answer、category、disabled、defaultExpanded。
- 在
onChange加入FAQ: [[record.question]]。
7.3 Custom Content 記錄詳情
- 新增另一個 Data Source Collapse,並以相同回應路徑重用
/spark/api/sample/collapse/faqs。 - 選擇 Custom Content,把 Title 對應到
question,Description 對應到summary。 - 按 Create Content,將資源命名為 Support answer content,並在寬版設計抽屜中編輯。
- 在 Content 中新增唯讀 Form,設定 Controls Per Row 為
2、Label 為4、Content 為8。 - 新增綁定
[[record.category]]、[[record.environment]]、[[record.renderMode]]的唯讀 Field。 - 新增獨占整列、綁定
[[record.answer]]的唯讀 TextArea。 - 切換 Preview Record,確認標題和 Form 內容都會同步更新。
8. 疑難排解
Test 提示 Row Unique Key 重複
使用穩定的業務 ID,不要使用列索引。分頁、排序和重新載入後,該鍵仍必須保持不變。
Design Preview 顯示 Sample Record
資料來源尚未設定、無法存取或請求失敗。請透過 Test 檢查 URL、回應路徑與後端請求。
修改範本後預覽沒有變化
儲存範本對話框,並確認 Record Fields 或實際回應中存在對應欄位。
在 Content 中讀取目前記錄
在子控制項值或 Interaction 運算式中使用 record.*,不要寫死從預覽記錄複製的值。
Load more 後原本展開的項目消失
確認同一業務記錄持續使用相同的 Row Unique Key。Spark 只能保留仍然穩定的鍵。
9. 設計建議
- 一組通常保持 3~8 個可見面板;更多項目應提供分類或搜尋。
- FAQ 和長說明優先使用 Single Panel Mode;需要對照時可允許多個面板展開。
- Title 應能獨立說明展開後的內容,Description 不要重複標題。
- Disabled 必須搭配可讀說明,不能只依賴灰色樣式。
- 後端必須提供穩定唯一鍵,並保持分頁回應結構一致。
- 動態欄位映射應在 Record Fields 中明確宣告,方便選擇、測試和維護。
- 不要嵌套多層 Collapse;請改用小標題、Tab 或獨立頁面。