从远程获取事件触发器:true

Rails Getting event trigger from remote:true

本文关键字:事件 触发器 true 获取 程获取      更新时间:2023-09-26

我有一个link_to与remote:true在一个按钮在我的一个视图在Rails

我想改变那个按钮的属性[让我们说把它变成蓝色]后,AJAX被调用和处理我的。js。erb文件,它指向,但我不知道如何获得该对象传递到我的。js.erb。如果我不使用remote:true,但使用原始/自制AJAX,我想要的是this$(this),但我不知道如何将this传递到我的.js.erb文件

示例代码(简化):

index . html

link_to("Load This One", show_path(1), {:remote true})

show.js.erb

//Load some modal
$("#myModal .modalcontent).html("<%=.......>"); 
$("#myModal").modal();
// ****** change properties on button that loaded that modal
$( this).css('color', 'blue');

我想知道如何在我的show.js.erb中获得link_to锚。这可能吗?

谢谢!

有两种方法:


UJS Ajax Hooks

可以在你的应用程序的asset pipeline:

中使用标准的UJS ajax捕获事件。
#app/assets/javascripts/application.js
$(document).on("ajax:send", "a", function(xhr){
   $(this).css("color", "blue");
}).on("ajax:success", "a", function(data, status, xhr) {
   alert("Ajax Success!!");
});

ID

在后端有效"绑定"元素的唯一其他方法是在DOM中使用id属性:

#app/views/controller/your_view.html.erb
<%= link_to "Load", show_path(1), remote: true, id: "1" %>

只要id属性与您传递给控制器的对象相对应,您就可以使用以下内容:

#app/controllers/your_controller.rb
Class YourController < ApplicationController
   def show
      ...
      @id = params[:id]
      respond_to do |format|
         format.js #-> show.js.erb
      end
   end
end
#app/views/your_controller/show.js.erb
$('# <%=j @id %>').css('color', 'blue')

为您的link_to指定id

<%= link_to("Load This One", show_path(1), remote: true, id: 'my-button') %>

然后用这个链接id来改变它的颜色

在你的js。erb文件

$('#my-button').css('color', 'blue')