gpt4 book ai didi

ruby-on-rails - 将功能附加到 rails 3 中的按钮

转载 作者:行者123 更新时间:2023-12-02 02:14:12 26 4
gpt4 key购买 nike

我的网页上显示了一组按钮。单击其中一个按钮的效果需要是对外部 API 进行调用(可能会收到响应,并更新页面上的某些内容)。

一些附加信息:这些按钮按部分放置在页面上,并构成用户列表的一部分。这些按钮旨在激活和停用列出的用户。我不确定此设置是否会影响执行我想做的事情的最佳方法,所以我认为值得一提。

这应该怎么做?这些按钮是否应该链接到我的 Rails 应用程序中的某个 Controller ?按下按钮时是否需要重新加载页面?我可以将该请求卸载到 ajax 等吗?

我不知道解决这个问题的最佳方法,任何指导都将证明是无价的。

最佳答案

好的。我相信我已经找到了一个很好的实现方式。

诀窍是创建一个封装按钮的表单,以便在单击按钮时点击正确的 Controller 。就我而言,我使用了 rails form_tag函数在我的 _list_item.html.erb 中生成我的按钮我的 Developer Controller 的部分 View 如下:

<div id=<%= list_item.id %>>
<%= form_tag "/Developer/toggle", :method => "get", :remote => true do %>
<p>
<% if list_item.inactive? %>
<%= submit_tag "Activate", :name => nil %>
<input type="hidden" name="act" value="activate" />
<% else %>
<%= submit_tag "Deactivate", :name => nil %>
<input type="hidden" name="act" value="deactivate" />
<% end %>
</p>
<input type="hidden" name="dev_id" value=<%=list_item.id%> />
<% end %>
</div>

在这部分中有两件事应该引起注意。

  1. 由于这是作为列表的一部分呈现的部分内容,您希望为每个列表项提供一个唯一的 ID,以便您的 javascript 仅作用于该元素。这是在第一行完成的,<div id=<%= list_item.id %>> ,我知道这将是唯一的,因为列表中的每个开发者都必须有一个唯一的 ID。
  2. :remote => trueform_for 的必要参数功能 这是导致在后台发出请求而不是加载新页面的原因。

此表单在提交时点击我的 Developer#toggle带有两个参数的操作:act ,它是 activatedeactivateid这是我们正在执行的开发人员的 ID。这两个参数都是表单中的隐藏字段。

提交表单后,在 Controller 内部,我只获取正确的 Developer 实例(在我的例子中,这样做相当复杂,但在大多数情况下,它可能类似于 @dev = Developer.find(id) ),并执行激活/停用开发人员所需的步骤。

最后,我创建了一个 toggle.js.erb我的 Developer Controller 的 View 目录中的文件,一旦 Controller 完成其任务就会呈现该文件。这个文件只是获取元素(通过我们在部分中给它的唯一 id)并通过重新渲染部分来替换内部 html,如下所示:

document.getElementById("<%=escape_javascript(@dev.id)%>").innerHTML="<%=escape_javascript(render :partial => 'developer/list_item', :object => @dev) %>";

结果是在开发人员事件状态更改后重新呈现部分,从而导致适当的 ActivateDeactivate按钮。

我意识到这个答案高度关注我的特定应用程序,特别是需要处理事件与非事件的切换,但我相信它很容易简化并适用于可能需要较少复杂性的其他情况。

关于ruby-on-rails - 将功能附加到 rails 3 中的按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11336583/

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