调试

使用 htmx(或任何其他声明性语言)进行声明式和事件驱动编程可能是一项精彩且高效的活动,但与命令式方法相比,一个缺点是调试可能更棘手。

例如,如果你不了解其中的窍门,那么弄清楚为什么某些事情没有发生可能会很困难。

嗯,这里有一些技巧:

你可以使用的第一个调试工具是 htmx.logAll() 方法。它将记录 htmx 触发的每个事件,并允许你准确查看库正在执行的操作。

htmx.logAll();

当然,这不会告诉你为什么 htmx 没有做某事。你可能也不知道 DOM 元素触发了哪些 monitorEvents() 事件作为触发器。为了解决这个问题,你可以使用浏览器控制台中提供的方法:

monitorEvents(htmx.find("#theElement"));

这会将发生在具有 id 的元素上的所有事件输出 theElement 到控制台,并允许你准确地看到正在发生的事情。

请注意,这只能在控制台中使用,你不能将其嵌入到页面的脚本标签中。

最后,无论如何,你可能只想通过加载未最小化的版本进行调试。它大约有 2500 行 JavaScript 代码,因此代码量并不大。你很可能想在 htmx.js issueAjaxRequest() 和 handleAjaxResponse() 方法 中设置一个断点来查看发生了什么。

如果你需要帮助,请随时加入 htmx 官方讨论组。

创建演示

有时,为了演示错误或阐明用法,最好能够使用像 jsfiddle 这样的 JavaScript 代码片段。为了方便创建演示,htmx 托管了一个演示脚本站点:

  • 页面
  • 超脚本
  • 请求模拟库

只需将以下脚本标签添加到你的 demo/fiddle/whatever 中:

<script src="https://demo.htmx.org"></script>

此帮助程序允许您通过添加带有 url 属性的模板标签来添加模拟响应,以指示哪个 URL。该 url 的响应将是模板的 innerHTML,从而可以轻松构建模拟响应。您可以使用 delay 属性向响应添加延迟,该属性应为整数,指示延迟的毫秒数。

你可以使用 ${} 语法在模板中嵌入简单的表达式。

请注意,这只应用于演示,并且不能保证长时间工作,因为它将始终抓取最新版本的 htmx 和 hyperscript!

演示示例

以下是代码运行的示例:

<!-- load demo environment -->
<script src="https://demo.htmx.org"></script>

<!-- post to /foo -->
<button hx-post="/foo" hx-target="#result">
    Count Up
</button>
<output id="result"></output>

<!-- respond to /foo with some dynamic content in a template tag -->
<script>
    globalInt = 0;
</script>
<template url="/foo" delay="500"> <!-- note the url and delay attributes -->
    ${globalInt++}
</template>