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

时间:2014-08-22 20:54:33

标签: javascript jquery ruby-on-rails ruby ajax

我在Rails的一个视图中的按钮上有一个remote_to与remote:true。

我想在调用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锚点。这可能吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

有两种方法可以做到这一点:


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

唯一有效的方式&#34; bind&#34;后端的元素是使用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')

答案 1 :(得分:0)

将id设为您的link_to

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

然后只需使用此链接ID更改其颜色

在你的js.erb文件中

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