gpt4 book ai didi

javascript - Rails - 多个远程表单点击相同的 Controller 操作?

转载 作者:行者123 更新时间:2023-12-02 17:41:19 25 4
gpt4 key购买 nike

我正在开发一个应用程序,其中使用远程表单从多个不同位置更新某个模型。我正在寻找一种模式来在更新此模型后动态调用正确的 JS 回调。

对于普通表单,可以通过在表单本身中传递重定向 url,然后在 Controller 中重定向到此 url 来解决此问题。远程表单端更难:我应该传递文件名吗?我应该传递任意字符串,然后在单个 .js.erb 文件中打开该字符串吗?还有其他建议吗?

这是否只是一个迹象,表明应重组应用程序以防止从多个位置更新同一模型?

最佳答案

不,如果您可以从不同位置调用相同的 Controller 操作,那就没问题。

您的选择:

1) 优选地,该 Controller 操作可以给出相同的响应并且适用于不同的位置,例如。它只是更新一个带有 id 的容器,该 id 存在于所有这些位置。

2) 您注意到重定向使过去的事情变得简单,请考虑将以下内容添加到您的应用程序 Controller 中:

def js_redirect_to(path, flash_messages = {})
flash_messages.each { |type, message| flash[type] = message }

respond_to do |format|
format.js { render :js => "window.top.location='#{path}';" }
end
end

这与普通的redirect_to签名相同,它只是允许你从js请求重定向。请注意,如果您使用 Turbolinks,则 js 应为“Turbolinks.visit(url);”。

3) 如果你确实不能像上面的选项一样一般地处理它,你可以传递你在表单中提交的位置的 JS 命名空间,并且 Controller 对所有位置调用相同的方法,这只是一个不同的命名空间。例如:

假设一个位置来自宠物管理,然后在 Assets pet.js 中:

var pet = {
load = function() {
your page load js...
},

... more functions...

post_callback = function(html_segment1, html_segment2) {
this is where you handle the form callback for pets...
$('some_element').html(html_segment1);
$('another_element').html(html_segment2);
}
}

为应用的其他位置构建更多类似的内容。无论如何,使用这样的 JS 命名空间是个好主意。然后您的表单向 Controller 提交一个参数 :location => :pet , Controller 响应:

... your JS code that all pages should execute...
html_segment1 = "<%= escape_javascript(render 'some_partial') %>";
html_segment2 = "<%= escape_javascript(render 'other_partial') %>";
<%= @location %>.post_callback(html_segment1, html_segment2);

4)使用widget gem,最流行的是apotomocells .

5) 只需在 Controller 中使用一个 case 即可渲染不同的 View 。

希望这对您有所帮助,如果您需要澄清,请告诉我。

关于javascript - Rails - 多个远程表单点击相同的 Controller 操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22183600/

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