javascript - 在 1 个 Controller 操作中多次更新 View

标签 javascript jquery ruby-on-rails ruby-on-rails-5

Rails 和 Web 开发新手。我有一个要修改的 DOM 元素。我目前有一个单独的 Javascript 文件来修改 DOM。

function start_loading_bar(msg) {
  loading_message(msg)
  $('#progress').fadeIn()
}
function loading_message(msg) {
  $('.progress-message').text(msg + "...")
}

这链接到表单提交按钮启动的 onclick 事件。

= f.submit "Submit", class: "btn btn-success", onclick: "start_loading_bar('Loading Feed data to Amazon');", remote: true

单击此按钮后,将执行 JS,然后执行处理表单提交的 Controller 函数。在这个 Controller 函数中,我想多次调用同一个 JS 函数。据我了解,我需要 Controller

respond_to do |format| 
    format.js { render js: "loading_message(msg);" }
end

为了调用js函数,我不认为我可以在一个函数中有多个respond_to block 。

也许我没有正确处理这个问题。

提供更多背景信息。这个 JS 函数链接到一个加载栏,当我执行 $('.progress-message').text(msg + "...") 时加载栏文本被设置,然后 $('#progress').fadeIn() 将移除 $(#progress) 上的 display:none; 并逐渐淡入。

我的最终目标是让表单提交按钮以通用消息启动加载栏,然后 Controller 将根据它所处的流程部分修改加载栏消息。我在 Controller 中有 3 个独立的步骤,所以,例如,我希望文本是...

“步骤 1/3”

“第 2/3 步”

“第 3/3 步”

在 Controller 功能的不同部分。

这需要我打电话

loading_message('step 1/3');

loading_message('步骤 2/3');

loading_message('步骤 3/3');

我想我必须将 Controller 分解成更小的部分,每个部分都将通过函数调用在 JS 中响应。

但是,我想问问我是否忽略了更好/更优雅的解决方案。

最佳答案

我要问的第一个问题是什么花费了这么长时间,以至于您需要向用户提供如此高级别的反馈,也许您应该将其发送给后台工作人员,这意味着您可能仍需要通知您的用户某种方式。

除非你打开一个 websocket,或者使用像 Pusher 这样的东西,否则让你的 Controller 更新你的 JS 并不是一件容易的事。

否则,你的第二个想法,如果 Controller Action 是完全不同的进程,那么 UI 请求每个步骤是有意义的。这将导致更多的网络调用和更多的错误。那么,您真的需要那种程度的反馈吗?

我不太确定您需要做什么,但如果需要很长时间,请将其推送到 Sidekiq 作业,然后实现像 Pusher 这样的 Pubsub。

关于javascript - 在 1 个 Controller 操作中多次更新 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57381631/

相关文章:

javascript - 使用 jquery 或 javascript 查找精确值?

javascript - Deno 顶层等待

javascript - 使用jquery计算跨度

jquery - select2 强制关注页面加载

mysql - 将Mysql代码转换为rails事件记录查询

ruby-on-rails - 无法安装 Ruby 1.9.3

ruby-on-rails - 参数缺失或值为空 : user rails 4

javascript - 如何使用简单的表单和js检查 strip 交易的响应

javascript - 隐藏覆盖按钮延迟

jquery - 如何修复 SECURITY_ERR : DOM Exception 18?