我有一个按钮,它打开位于some_template.html的对话框:
<button @click="open = !open"
id="btn_id"
hx-get="/some_url/"
hx-trigger="click"
hx-swap="outerHTML">
</button>
字符串
然后我有another_template.html
,其中包括some_template.html
在another_template.html
中,我正在处理一个按钮单击:
<script>
document.addEventListener('alpine:init', () => {
Alpine.data('dialog', () => ({
handleButtonClick(id) {
console.log(id); // prints the expected id correctly
const button = document.getElementById('btn_id');
const url = `/some_url/${id}`;
button.setAttribute('hx-get', url);
console.log(button.attributes); // prints the updated `hx-get` with the id included
button.click();
}
}));
});
</script>
型
对话框正确打开,这意味着button.click()
工作正常。
主要的问题是按钮中的hx-get
没有被更新,也就是说,没有与之关联的id
,它仍然使用按钮中最初定义的内容处理请求:hx-get="/some_url/"
。
2条答案
按热度按时间2guxujil1#
问题是我在修改按钮的属性后没有使用html.process():
llew8vvj2#
一旦htmx处理了一个节点,hx-get属性就存储在内部,在元素中更改它不会有什么不同,正如您已经注意到的那样。
改变它的一种方法是使用
htmx:configRequest
事件。举例来说:字符串
您可以将侦听器添加到窗口中,并让它检查
data-htmx-url
属性的存在,如果存在则使用该属性,否则保持路径不变。然后在当前代码中,在带有新url的按钮上设置data-htmx-url
属性。型
最后,您可以将其与
htmx:afterRequest
结合使用,以便在请求完成时删除该属性。型