intercooler.js → htmx 迁移指南

本指南的目的是:

在开始之前

值得注意的是,Intercooler 旨在实现的目标与 htmx 的方法存在差异。

Intercooler 试图为其大多数功能提供自定义 HTML 属性。这在其较长的属性列表中显而易见,其中许多属性可以描述为便利性或客户端侧焦点性质的。

htmx 采用的方法是保持核心简小,提供一小组可用的属性,这些属性主要关注内容加载和交换。

这种能力主要通过以下两种方式增强:

  1. Extensions。htmx 扩展框架允许自定义扩展/插件来实现特定功能。例如,Intercooler 中内置的依赖机制在 htmx 核心中不存在,但可以通过 一个扩展 获得。还有其他扩展,可以实现 Intercooler 开箱即用无法实现的新行为,例如 preload 扩展

  2. 使用 htmx 事件系统结合原生 JavaScript、alpine.jshyperscript。Hyperscript 是一种小型开源脚本语言,设计用于嵌入 HTML,受 HyperTalk 启发,是 htmx 的配套项目。

htmx 还包含 Intercooler 中不存在的功能。这超出了本指南的范围。

最后,值得注意的是,这仍处于开发中,可能会随着时间变化。

迁移信息

本指南的其余部分以表格形式布局,每张表格试图将 Intercooler 的以下常见功能区域映射到 htmx 等效项:

Attributes

注意:对于某些 Intercooler 属性(主要是客户端特定属性,例如 ic-action 和相关属性),htmx 中没有直接等效项。相反,有一种小型、表达力强的语言可用,称为 hyperscript(参见 http://hyperscript.org),它设计用于嵌入 HTML,并作为 htmx 的无缝伴侣。它允许您实现某些 客户端焦点 Intercooler 属性的相同行为,但以更灵活和开放的方式。

请参阅 htmx 关于 hyperscript 的文档 以获取实际示例,以及更多关于 hyperscript 背后的哲学。

Intercoolerhtmx
ic-action无。使用 Hyperscript,例如 <button _="on click add .clicked">Add The "clicked" Class To Me</button>。请参阅 htmx 关于 hyperscript 的文档hyperscript 文档 以获取更多示例
ic-action-target无。使用 Hyperscript 目标表达式,例如 <div _="on click set .button.style.color to 'red'">Set All Buttons To Red</div>
ic-add-class无。使用 Hyperscript,例如 <button _="on click add .clicked">Add The "clicked" Class To Me</button>。请参阅 htmx 关于 hyperscript 的文档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)。请参阅 htmx 关于 hyperscript 的文档hyperscript 文档 以获取更多示例
ic-on-beforeTrigger无。使用 Hyperscript 结合事件(例如 htmx:beforeRequest)。请参阅 htmx 关于 hyperscript 的文档hyperscript 文档 以获取更多示例
ic-on-complete无。使用 Hyperscript 结合事件(例如 htmx:afterRequest)。请参阅 htmx 关于 hyperscript 的文档hyperscript 文档 以获取更多示例
ic-on-error无。使用 Hyperscript 结合事件(例如 htmx:afterRequest)。请参阅 htmx 关于 hyperscript 的文档hyperscript 文档 以获取更多示例
ic-on-success无。使用 Hyperscript 结合事件(例如 htmx:afterRequest)。请参阅 htmx 关于 hyperscript 的文档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无。请参阅 htmx 关于 hyperscript 的文档 以获取使用 hyperscript 实现它的示例
ic-remove-class无。使用 Hyperscript,例如 <button class="red" _="on click remove .red">Remove The "red" class from me</button>。请参阅 htmx 关于 hyperscript 的文档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无。请参阅 htmx 关于 hyperscript 的文档 以获取使用 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

Request parameters

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 标头

Request headers

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

Response headers

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无。如果使用 load polling,响应包含不同加载间隔的内容。
X-IC-Open无。没有直接等效功能(待确认)
X-IC-PushURLHX-Push
X-IC-Remove无。没有直接等效功能(待确认)
X-IC-Title无。没有直接等效功能(待确认)
X-IC-Title-Encoded无。没有直接等效功能(待确认)
X-IC-Set-Local-Vars无。没有直接等效功能(待确认)

Events

注意:所有 htmx 事件 都会以 Camel 和 Kebab 命名法触发。

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无直接等效。当使用 load polling 时,[htmx:load 事件] 可以潜在地使用
handle.onpopstate.ichtmx:historyRestore(待确认)
elementAdded.ichtmx:load
pushUrl.ic待定
beforeHistorySnapshot.ichtmx:beforeHistorySave

JavaScript API methods

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 tags

Intercoolerhtmx
<meta name="intercoolerjs:use-data-prefix" content="true"/>无。您可以简单地使用 data- 前缀而无需指定元标签。htmx 会自动识别这样的 htmx 属性,例如 <a data-hx-post="/click">Click Me!</a>
<meta name="intercoolerjs:use-actual-http-method" content="true"/>无。默认情况下 htmx 发送实际的 HTTP 方法。但是,您可以通过 method-override 扩展 将所有非 GET 请求的动词更改为 POST