django 如何动态更改hx-get值?

9lowa7mx  于 2023-08-08  发布在  Go
关注(0)|答案(2)|浏览(89)

我有一个按钮,它打开位于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/"

2guxujil

2guxujil1#

问题是我在修改按钮的属性后没有使用html.process():

llew8vvj

llew8vvj2#

一旦htmx处理了一个节点,hx-get属性就存储在内部,在元素中更改它不会有什么不同,正如您已经注意到的那样。
改变它的一种方法是使用htmx:configRequest事件。举例来说:

button.addEventListener('htmx:configRequest', (event) => {
   event.detail.path = url;
});

字符串
您可以将侦听器添加到窗口中,并让它检查data-htmx-url属性的存在,如果存在则使用该属性,否则保持路径不变。然后在当前代码中,在带有新url的按钮上设置data-htmx-url属性。

window.addEventListener('htmx:configRequest', (event) => {
   if (event.srcElement.getAttribute('data-htmx-url)) {
      event.detail.path = event.srcElement.getAttribute('data-htmx-url);
   }
});


最后,您可以将其与htmx:afterRequest结合使用,以便在请求完成时删除该属性。

window.addEventListener('htmx:afterRequest', (event) => {
   event.detail.elt.removeAttribute('data-htmx-url);
});

相关问题