方法 - htmx.defineExtension()

htmx.defineExtension 是 HTMX 提供的一个注册自定义扩展的 API,允许你扩展 HTMX 的行为,例如在请求发出前修改参数、拦截响应、添加新属性支持等。

这是实现自定义行为的核心工具,适用于你想封装自己的逻辑,并通过 hx-ext="your-ext" 在页面中启用。

参数

  • name - 扩展名
  • ext - 扩展定义

基本语法

  // defines a silly extension that just logs the name of all events triggered
  htmx.defineExtension("silly", {
    onEvent : function(name, evt) {
      console.log("Event " + name + " was triggered!")
    }
  });

示例:添加请求时间戳参数

下面我们写一个扩展,每次请求自动加一个 ts=时间戳 参数:

htmx.defineExtension("add-timestamp", {
  onEvent: function (name, evt) {
    // 可以监听事件(可选)
  },
  encodeParameters: function(xhr, parameters, elt) {
    parameters.ts = Date.now(); // 添加时间戳
    return parameters;
  }
});

然后在 HTML 中启用它:

<div hx-get="/api/data" hx-target="#result" hx-ext="add-timestamp">
  加载数据
</div>
<div id="result"></div>

浏览器发出的请求就会全部变成以下格式:

/api/data?ts=1720000000000