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 属性(尤其是以客户端为中心的属性)相同的功能,但在更灵活和开放的方式下。

请参阅 htmx 关于 hyperscript 的文档,获取实际示例,以及更多关于 hyperscipt 背后理念的信息。

Intercoolerhtmx
ic-action无。使用 Hyperscript,例如 <button _="on click add .clicked">将“clicked” 类添加到我</button>。请参阅 htmx 关于 hyperscript 的文档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>。请参阅 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无。结合事件(例如 htmx:beforeRequest)使用 Hyperscript。请参阅 htmx 关于 hyperscript 的文档hyperscript 文档,获取更多示例
ic-on-beforeTrigger无。结合事件(例如 htmx:beforeRequest)使用 Hyperscript。请参阅 htmx 关于 hyperscript 的文档hyperscript 文档,获取更多示例
ic-on-complete无。结合事件(例如 htmx:afterRequest)使用 Hyperscript。请参阅 htmx 关于 hyperscript 的文档hyperscript 文档,获取更多示例
ic-on-error无。结合事件(例如 htmx:afterRequest)使用 Hyperscript。请参阅 htmx 关于 hyperscript 的文档hyperscript 文档,获取更多示例
ic-on-success无。结合事件(例如 htmx:afterRequest)使用 Hyperscript。请参阅 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">从我身上移除“red” 类</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无。结合触发器或 path-deps 扩展使用 hx-get
ic-sse-srchx-sse
ic-style-src无。没有直接的等效功能存在(待办事项)
ic-swap-stylehx-swap
ic-switch-class无。请参阅 htmx 关于 _hyperscript_ 的文档,获取有关如何使用 _hyperscript_htmx: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无。如果使用 load polling,则响应中包含具有不同加载间隔的内容。
X-IC-Open无。没有直接的等效功能存在(待办事项)
X-IC-PushURLHX-Push
X-IC-Remove无。没有直接的等效功能存在(待办事项)
X-IC-Title无。没有直接的等效功能存在(待办事项)
X-IC-Title-Encoded无。没有直接的等效功能存在(待办事项)
X-IC-Set-Local-Vars无。没有直接的等效功能存在(待办事项)

#事件

注意:所有 htmx 事件 都会以驼峰式和 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没有直接等效项。当使用 负载轮询 时,可以考虑使用 [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)无。没有直接的等效功能存在(待办事项)

#元标签

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