此代码不会触发交换事件,即使我可以看到 afterSettle 事件正在控制台中触发。
<div id="product-gallery" hx-trigger="htmx:afterSettle" hx-get="{% url 'products' %}" hx-swap="outerHTML">
这可行,但当然会永远循环,其中:
<div id="product-gallery" hx-trigger="load" hx-get="{% url 'products' %}" hx-swap="outerHTML">
我可以从 htmx.logAll() 看到 htmx:afterSettle 甚至正在触发,它只是没有触发上述元素。也尝试过 htmx:afterSwap,它也是由 logAll() 记录的
我正在尝试在换出表单后重新加载图库(表单位于此父产品图库 div 中)。我希望我可以通过添加一个 from 约束来实现:
<div id="product-gallery" hx-get="{% url 'products' %}" hx-swap="outerHTML" hx-trigger="afterSettle from:.product-form">
结构是:
<div id="product-gallery">
<div id="product-form-1">
<form>
...
</form>
</div>
...
</div>
更新 - 它有效!遵循来自https://htmx.org/examples/update-other-content/的解决方案 3 :我在表单更新视图中的响应中添加了一个标题:
if form.is_valid():
form.save()
context = dict()
context['form'] = form
response = render(self.request, 'form_product.html', context)
response['HX-Trigger'] = 'productUpdate'
return response
然后我在画廊 div 中监听这个事件:
<div id="product-gallery" hx-get="{% url 'products' %}" hx-swap="outerHTML" hx-trigger="productUpdate from:body">
我保留的一点 js 是在表单有效时关闭表单:
htmx.on("htmx:afterSwap", function(evt) {
const eventIdTarget = evt['target'].id;
if (eventIdTarget === 'product-gallery') {
if ($("[id^=product-form] .alert-warning").length === 0) {
$.magnificPopup.close();
}
}
})