【发布时间】:2019-06-30 05:37:56
【问题描述】:
我正在使用带有 webpacker 的 5.2。这是一款带有评论的简单餐厅应用。
评论具有列内容和评级。
在我的app/javascript/plugins 中,我运行了一个小脚本,它在表单上创建了一个星级评分,这使得评分的输入看起来像星星,(https://github.com/antennaio/jquery-bar-rating) 工作正常。
但是,我在餐厅显示页面上显示评论和评论表单,并在提交时执行呈现以下 js 的 AJAX 请求 - 基本上,它将新评论附加到这家餐厅的评论列表中,然后我刷新整个表格摆脱输入。如果评论没有保存,我只是刷新表单。
function refreshForm(innerHTML) {
const newReviewForm = document.getElementById('new_review');
newReviewForm.innerHTML = innerHTML;
}
function addReview(reviewHTML) {
const reviews = document.getElementById('reviews');
reviews.insertAdjacentHTML('beforeend', reviewHTML);
}
<% if @review.errors.any? %>
refreshForm('<%# j render "reviews/form", restaurant: @restaurant, review: @review %>');
<% else %>
addReview('<%= j render "reviews/show", review: @review %>');
refreshForm('<%= j render "reviews/form", restaurant: @restaurant, review: Review.new %>');
<% end %>
这个 AJAX 请求也可以按预期工作,但是当简单的表单被刷新时,评级的输入只是一个普通的下拉菜单,不再是插件中的星星。如何在视图文件夹中的 AJAX js 中从 app/javascript/plugin/init_star.js 调用脚本?
我还尝试将星形脚本打包并仅在餐厅/节目中调用<%= javascript_pack_tag> %,甚至在部分渲染表单(并刷新它)中调用。需要再次调用star函数,不知道怎么访问。
【问题讨论】:
标签: javascript jquery ruby-on-rails ajax