gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 19:21:47 25 4
gpt4 key购买 nike

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com