intercooler.js → htmx 遷移指南

本指南的目的是:

#開始之前

值得注意的是 Intercooler 的目標與 htmx 的做法之間的方法差異。

Intercooler 嘗試為其大部分功能提供自訂 HTML 屬性。這在其較長的屬性列表中很明顯,其中許多屬性可以描述為便利或以客戶端為中心。

htmx 遵循保持核心小的做法,使用一組較小的可用屬性,這些屬性主要集中在內容載入和交換上。

此功能主要透過兩種方式增強:

  1. 擴展。htmx 擴展框架允許自訂擴展/外掛程式以實現特定功能。一個例子是 Intercooler 中內建的依賴機制,該機制不存在於 htmx 核心中,但可透過擴展獲得。還有其他擴展可以啟用 Intercooler 無法開箱即用的新行為,例如 preload 擴展

  2. 將 htmx 事件系統與原生 JavaScript、alpine.jshyperscript 結合使用。Hyperscript 是一種小型、開放的腳本語言,旨在嵌入 HTML 中,靈感來自 HyperTalk,並且是 htmx 的配套專案。

htmx 還包含 Intercooler 中不存在的功能。這不屬於本指南的範圍。

最後,值得注意的是,這仍然是一項正在進行的工作,並且隨著時間的推移可能會發生變化。

#遷移資訊

本指南的其餘部分以表格的形式佈局,每個表格都嘗試將 Intercooler 的以下常見功能區域對應到等效的 htmx:

#屬性

注意:對於某些 Intercooler 屬性(大多數是特定於客戶端的屬性,例如 ic-action 和相關屬性),沒有直接的 htmx 等效項。相反,有一種小型、富有表現力的語言可用,稱為 hyperscript(請參閱 http://hyperscript.org),它旨在嵌入 HTML 中,並作為 htmx 的無縫夥伴。它允許您以更靈活和開放的方式實現與某些以客戶端為中心的 Intercooler 屬性相同的行為。

請參閱 關於 hyperscript 的 htmx 文件,了解實際範例以及更多關於 hyperscript 背後的哲學。

Intercoolerhtmx
ic-action無。使用 Hyperscript,例如 <button _="on click add .clicked">將 "clicked" 類別新增到我</button>。請參閱 關於 hyperscript 的 htmx 文件hyperscript 文件,以取得更多範例
ic-action-target無。使用 Hyperscript 目標表達式,例如 <div _="on click set .button.style.color to 'red'">將所有按鈕設定為紅色</div>
ic-add-class無。使用 Hyperscript,例如 <button _="on click add .clicked">將 "clicked" 類別新增到我</button>。請參閱 關於 hyperscript 的 htmx 文件hyperscript 文件,以取得更多範例
ic-append-from無。可以透過使用例如 hx-gethx-swap 以及值 beforeend 來實現等效功能
ic-attr-src無。不存在直接等效的功能 (待定)
ic-confirmhx-confirm
ic-delete-fromhx-delete
ic-depshx-trigger="path-deps" 以及 path-deps="/foo/bar"。(需要path-deps 擴展
ic-disable-when-doc-hidden無。不存在直接等效的功能 (待定)
ic-disable-when-doc-inactive無。不存在直接等效的功能 (待定)
ic-enhancehx-boost
ic-fix-ids無。不存在直接等效的功能 (待定)
ic-get-fromhx-get
ic-global-include無。hx-include 可用於實現類似的功能
ic-global-indicator無。hx-indicator 可用於實現類似的功能
ic-history-elthx-history-elt
ic-includehx-include
ic-indicatorhx-indicator
ic-limit-children無。不存在直接等效的功能 (待定)
ic-local-vars無直接等效項。hx-vars 可用於促進。
ic-on-beforeSend無。將 Hyperscript 與事件結合使用(例如 htmx:beforeRequest)。請參閱 關於 hyperscript 的 htmx 文件hyperscript 文件,以取得更多範例
ic-on-beforeTrigger無。將 Hyperscript 與事件結合使用(例如 htmx:beforeRequest)。請參閱 關於 hyperscript 的 htmx 文件hyperscript 文件,以取得更多範例
ic-on-complete無。將 Hyperscript 與事件結合使用(例如 htmx:afterRequest)。請參閱 關於 hyperscript 的 htmx 文件hyperscript 文件,以取得更多範例
ic-on-error無。將 Hyperscript 與事件結合使用(例如 htmx:afterRequest)。請參閱 關於 hyperscript 的 htmx 文件hyperscript 文件,以取得更多範例
ic-on-success無。將 Hyperscript 與事件結合使用(例如 htmx:afterRequest)。請參閱 關於 hyperscript 的 htmx 文件hyperscript 文件,以取得更多範例
ic-patch-tohx-patch
ic-pause-polling無。可以使用諸如 load polling 之類的技術
ic-poll無。可以透過在排程上觸發載入來實現等效效果,例如 <div hx-get="/news" hx-trigger="every 2s"></div>。請參閱關於輪詢的文件
ic-poll-repeats無。可以透過在排程上觸發載入來實現等效效果,例如 <div hx-get="/news" hx-trigger="every 2s"></div>。請參閱關於輪詢的文件
ic-post-errors-to無。可以透過事件捕獲錯誤,並透過 htmx.logger 機制記錄錯誤
ic-post-tohx-post
ic-prepend-from可使用hx-swap 屬性,其值設定為 beforeend 來達到相同結果
ic-prompthx-prompt
ic-push-urlhx-push-url
ic-push-params在 htmx 中,如果是 GET,參數會自動推送
ic-put-tohx-put
ic-remove-after無。請參閱關於 hyperscript 的 htmx 文件,以取得如何使用 hyperscript 實作的範例
ic-remove-class無。使用 Hyperscript,例如 <button class="red" _="on click remove .red">從我身上移除 "red" 類別</button>。請參閱 關於 hyperscript 的 htmx 文件hyperscript 文件,以取得更多範例
ic-replace-target可使用hx-swap 屬性,其值設定為 outerHTML 來達到相同結果
ic-scroll-offset無。不存在直接等效的功能
ic-scroll-to-target請參閱 hx-swap 屬性上的 scrollshow 修飾符
ic-select-from-responsehx-select
ic-src無。將 hx-get 與觸發器或path-deps 擴展結合使用
ic-sse-srchx-sse
ic-style-src無。不存在直接等效的功能 (待定)
ic-swap-stylehx-swap
ic-switch-class無。請參閱 關於 _hyperscript 的 htmx 文件,以取得如何使用 _hyperscripthtmx:beforeOnLoad 事件實作的範例
ic-targethx-target
ic-transform-response無。client-side-templates 擴展透過諸如 mustachehandlebarsnunjucks 之類的範本引擎啟用 JSON 回應轉換
ic-transition-duration無。可以透過依賴 htmx 交換機制和 CSS 轉換的性質來實現等效功能
ic-trigger-delay使用 hx-trigger 以及修飾符
ic-trigger-from使用 hx-trigger 以及 from: 子句
ic-trigger-onhx-trigger
ic-verb無。預設情況下,htmx 會傳送實際的 http 方法。但是,您可以透過method-override 擴展將非 GET 動詞設為 POST

#請求參數

Intercoolerhtmx
ic-request無。使用 HX-Request 標頭
_method無。使用 method-override 擴展及其提供的 X-HTTP-Method-Override 標頭
ic-element-id
ic-element-name
ic-target-id無。使用 HX-Target 標頭
ic-trigger-id無。使用 HX-Trigger 標頭
ic-trigger-name無。使用 HX-Trigger-Name 標頭
ic-current-url無。使用 HX-Current-URL 標頭
ic-prompt-value無。使用 HX-Prompt 標頭

#請求標頭

Intercoolerhtmx
X-IC-RequestHX-Request
X-HTTP-Method-OverrideX-HTTP-Method-Override

#回應標頭

Intercoolerhtmx
X-IC-TriggerHX-TriggerHX-Trigger-After-SettleHX-Trigger-After-Swap。請參閱文件以取得更多詳細資訊
X-IC-RefreshHX-Refresh
X-IC-RedirectHX-Redirect
X-IC-Script無。不存在直接等效的功能 (待定)
X-IC-CancelPolling無。使用 HTTP 回應代碼 286 來取消輪詢
X-IC-ResumePolling無。不存在直接等效的功能
X-IC-SetPollInterval無。如果使用載入輪詢,請回應包含不同載入間隔的內容。
X-IC-Open無。不存在直接等效的功能 (待定)
X-IC-PushURLHX-Push
X-IC-Remove無。不存在直接等效的功能 (待定)
X-IC-Title無。不存在直接等效的功能 (待定)
X-IC-Title-Encoded無。不存在直接等效的功能 (待定)
X-IC-Set-Local-Vars無。不存在直接等效的功能 (待定)

#事件

注意:所有的 htmx 事件 都會以駝峰式 (Camel case) 和烤肉串式 (Kebab case) 兩種形式觸發。

Intercoolerhtmx
log.ic無。可透過 htmx.logger 達到相同效果。請參閱 事件 & 日誌 文件
beforeAjaxSend.ichtmx:configRequest
beforeHeaders.ic無。不存在直接等效的功能 (待定)
afterHeaders.ic無。不存在直接等效的功能 (待定)
beforeSend.ichtmx:beforeRequest
success.ichtmx:afterOnLoad
after.success.ic近似等效:htmx:beforeSwap
error.ichtmx:sendErrorhtmx:sseErrorhtmx:responseErrorhtmx:swapErrorhtmx:onLoadError (待確認)
complete.ichtmx:afterRequest
onPoll.ic沒有直接等效的事件。當使用 載入輪詢時,可以使用 [htmx:load 事件]。
handle.onpopstate.ichtmx:historyRestore (待確認)
elementAdded.ichtmx:load
pushUrl.ic待定
beforeHistorySnapshot.ichtmx:beforeHistorySave

#JavaScript API 方法

Intercoolerhtmx
Intercooler.refresh(eltOrPath)PathDeps.refresh() (需要 path-deps 擴充功能)
Intercooler.triggerRequest(elt, handler)htmx.trigger()
Intercooler.processNodes(elt)htmx.process()
Intercooler.closestAttrValue(elt, attr)htmx.closest() 可以搭配任何選擇器使用
Intercooler.verbFor(elt)無。不存在直接等效的功能 (待定)
Intercooler.isDependent(elt1, elt2)無。不存在直接等效的功能 (待定)
Intercooler.getTarget(elt1)無。不存在直接等效的功能 (待定)
Intercooler.processHeaders(elt, xhr)無。不存在直接等效的功能 (待定)
Intercooler.ready(func(elt))htmx.onLoad()
LeadDyno.startPolling(elt)無。不存在直接等效的功能 (待定)
LeadDyno.stopPolling(elt)無。不存在直接等效的功能 (待定)

#Meta 標籤

Intercoolerhtmx
<meta name="intercoolerjs:use-data-prefix" content="true"/>無。您可以直接使用 data- 前綴,而無需指定 meta 標籤。htmx 會自動識別像這樣的 htmx 屬性:<a data-hx-post="/click">點我!</a>
<meta name="intercoolerjs:use-actual-http-method" content="true"/>無。預設情況下,htmx 會發送實際的 http 方法。您可以透過 method-override 擴充功能 將所有非 GET 請求的動詞更改為 POST。