繁体   English   中英

在 Rails 中,如何在我的 AJAX JS 文件中告诉我单击了哪个按钮

[英]In Rails how can I tell in my AJAX JS file what button was clicked

在我的 Rails 应用程序中,我有一个视图 notify.html.erb 和多个 forms,它们是根据几个不同的模型动态创建的,例如 Child.rb 和 Friend.rb。

通知.html.erb

<% @user.children.order("created_at").each do |child| %>
  <%= form_for(child, :method => :put, :remote => true)) do |f| %>
    <div class="notify-name"><%= child.name %></div>
    <%= f.email_field :email, :required => true, :placeholder => "Email Address", :class => "invite-email" %>
    <%= f.submit "Invite", :class => "btn btn-primary invite-user-btn" %>
  <% end %>
<% end %>

<% @user.friends.order("created_at").each do |friend| %>
  <%= form_for(friend, :method => :put, :remote => true)) do |f| %>
    <div class="notify-name"><%= friend.name %></div>
    <%= f.email_field :email, :required => true, :placeholder => "Email Address", :class => "invite-email" %>
    <%= f.submit "Invite", :class => "btn btn-primary invite-user-btn" %>
  <% end %>
<% end %>

forms 设置为 remote => true 以便它们由 AJAX 处理。在每个 controller 更新操作中,我有:

children_controller.rb

def update
    child = Child.find(params[:id])
    email = params[:child][:email]
    if child.update(child_params)
      UserMailer.invite_new_user(current_user, child.name, email).deliver_later
      respond_to do |format|  
        format.html { redirect_back(fallback_location: documents_path) }
        format.js
      end  
    end
end

在我的 update.js.erb 文件中,我希望能够 select 被点击的特定按钮。 但正如您在我上面的视图中看到的那样,这些按钮并没有什么独特之处(它们是根据用户拥有的孩子和朋友的数量动态创建的,并且它们每个都具有相同的类别)。 我怎样才能得到被点击的按钮,以便我可以更新那个按钮的值?

添加带有子 ID 的隐藏字段

<% @user.children.order("created_at").each do |child| %>
  <%= form_for(child, :method => :put, :remote => true)) do |f| %>
    <div class="notify-name"><%= child.name %></div>
    <%= f.email_field :email, :required => true, :placeholder => "Email Address", :class => "invite-email" %>

    <%= f.hidden_field :id, value: child.id %>

    <%= f.submit "Invite", :class => "btn btn-primary invite-user-btn" %>
  <% end %>
<% end %>

这将在参数中提交一个孩子的id

在 controller

def update
  child = Child.find(params[:child][:id])
  email = params[:child][:email]

  if child.update(child_params)
    UserMailer.invite_new_user(current_user, child.name, email).deliver_later

    respond_to do |format|  
      format.html { redirect_back(fallback_location: documents_path) }
      format.js
    end  
  end
end

传递一个隐藏的文件,每个文件都用特定的值硬编码。 然后你可以看到那个参数

% @user.children.order("created_at").each do |child| %>
  <%= form_for(child, :method => :put, :remote => true)) do |f| %>
    <%= hidden_field_tag 'invitable_type', 'child' %>
    <div class="notify-name"><%= child.name %></div>
    <%= f.email_field :email, :required => true, :placeholder => "Email Address", :class => "invite-email" %>
    <%= f.submit "Invite", :class => "btn btn-primary invite-user-btn" %>
  <% end %>
<% end %>

<% @user.friends.order("created_at").each do |friend| %>
  <%= form_for(friend, :method => :put, :remote => true)) do |f| %>
    <%= hidden_field_tag 'invitable_type', 'friend' %>
    <div class="notify-name"><%= friend.name %></div>
    <%= f.email_field :email, :required => true, :placeholder => "Email Address", :class => "invite-email" %>
    <%= f.submit "Invite", :class => "btn btn-primary invite-user-btn" %>
  <% end %>
<% end %>

现在在你的update.js.erb中你可以访问它

<% if params[:invitable_type] == 'friend' %>
// you js code to enable button for friend
<% elsif params[:invitable_type] == 'child' %>
// you js code to enable button for child
<% end %>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM