使用 htmx 和 tinymce 时获取错误列表
getting errolist when using htmx and tinymce
我正在尝试使用 htmx 实现 post 请求,并使用 tinymce 实现富文本编辑器。
我的表格:
<!--<form method="POST"> {% csrf_token %}-->
<form onsubmit='copyContent()' method= "post" hx-post= "{% url 'forum:forum-detail' post.pk %}" hx-swap="innerHTML" hx-target = "#comment-list">
<div class="modal-body">
<div class="form-group">
<label for="threadTitle">Your Answer</label>
<textarea name="reply" class="form-control summernote" placeholder="Input your answer here"></textarea>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-light" id="cancelForm">Cancel</button>
<button type="submit" class="btn btn-primary" name="btn-post-question">Post</button>
</div>
</form>
我得到的错误:
<ul class="errorlist"><li>reply<ul class="errorlist"><li>This field is required.</li></ul></li></ul>
当我将传统的 post 请求与 TinyMCE 一起使用时,它工作正常。
当我在没有 TinyMCE 的情况下使用 htmx 时,它的工作也很好。
当我结合 htmx 和 TinyMCE 时,我得到了错误。
我的 tinymce 初始化:
tinymce.init({
selector: 'textarea',
body_id : "reply",
height: 200,
plugins: 'a11ychecker advcode casechange export formatpainter linkchecker autolink lists checklist media mediaembed pageembed permanentpen powerpaste table advtable tinycomments tinymcespellchecker image code',
toolbar: 'a11ycheck addcomment showcomments casechange checklist code export formatpainter pageembed permanentpen table image',
toolbar_mode: 'floating',
tinycomments_mode: 'embedded',
tinycomments_author: 'Author name',
});
这是为我解决这个特殊问题的方法。
在这种情况下,当 HTMX 事件触发时,tinyMCE.triggerSave() 方法没有被触发。因此,您需要做的是在 HTMX 预请求事件之一期间调用该方法。在这种情况下,我使用了 htmx:configRequest 事件,但是可能有更好的 HTMX 事件可供使用。
示例:
document.body.addEventListener('htmx:configRequest', (event) => {
// trigger the rich text editor save method
tinyMCE.triggerSave();
// update the parameter in request
richContent = document.querySelector('#{{ your form field id}}');
event.detail.parameters['{{ your form field name }}'] = richContent.value;
})
由于 HTMX 事件触发的方式,一旦 htmx:configRequest 事件触发就已经收集了表单值,因此您需要更新请求中的字段值。也许有一些更好的方法可以做到这一点,但这对我有用。
我正在尝试使用 htmx 实现 post 请求,并使用 tinymce 实现富文本编辑器。
我的表格:
<!--<form method="POST"> {% csrf_token %}-->
<form onsubmit='copyContent()' method= "post" hx-post= "{% url 'forum:forum-detail' post.pk %}" hx-swap="innerHTML" hx-target = "#comment-list">
<div class="modal-body">
<div class="form-group">
<label for="threadTitle">Your Answer</label>
<textarea name="reply" class="form-control summernote" placeholder="Input your answer here"></textarea>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-light" id="cancelForm">Cancel</button>
<button type="submit" class="btn btn-primary" name="btn-post-question">Post</button>
</div>
</form>
我得到的错误:
<ul class="errorlist"><li>reply<ul class="errorlist"><li>This field is required.</li></ul></li></ul>
当我将传统的 post 请求与 TinyMCE 一起使用时,它工作正常。
当我在没有 TinyMCE 的情况下使用 htmx 时,它的工作也很好。
当我结合 htmx 和 TinyMCE 时,我得到了错误。
我的 tinymce 初始化:
tinymce.init({
selector: 'textarea',
body_id : "reply",
height: 200,
plugins: 'a11ychecker advcode casechange export formatpainter linkchecker autolink lists checklist media mediaembed pageembed permanentpen powerpaste table advtable tinycomments tinymcespellchecker image code',
toolbar: 'a11ycheck addcomment showcomments casechange checklist code export formatpainter pageembed permanentpen table image',
toolbar_mode: 'floating',
tinycomments_mode: 'embedded',
tinycomments_author: 'Author name',
});
这是为我解决这个特殊问题的方法。
在这种情况下,当 HTMX 事件触发时,tinyMCE.triggerSave() 方法没有被触发。因此,您需要做的是在 HTMX 预请求事件之一期间调用该方法。在这种情况下,我使用了 htmx:configRequest 事件,但是可能有更好的 HTMX 事件可供使用。
示例:
document.body.addEventListener('htmx:configRequest', (event) => {
// trigger the rich text editor save method
tinyMCE.triggerSave();
// update the parameter in request
richContent = document.querySelector('#{{ your form field id}}');
event.detail.parameters['{{ your form field name }}'] = richContent.value;
})
由于 HTMX 事件触发的方式,一旦 htmx:configRequest 事件触发就已经收集了表单值,因此您需要更新请求中的字段值。也许有一些更好的方法可以做到这一点,但这对我有用。