在.js.erb文件中使用$(this) – Ruby on Rails AJAX

我正在使用Rails3与jQuery并尝试进行简单的ajax调用。 我有一个链接,显示应用程序的当前状态(在线/离线)。 单击时,它将更新状态。

link_to app.status, { :controller => :apps, :action => :live_status, :id => app }, {:remote => true, :class => "#{app.status} status"} 

live_status.js.erb:

 $(this).fadeOut(); $(this).parent().html(""); $(this).fadeIn(); 

status_link将返回更新的link_to

然而$(这个)并不像我想象的那样。 如何使用新状态更新点击状态?

你应该使用一个选择器。 当您在ajax响应中解释了该代码时,jQuery不知道您指的是什么“this”。 更好地使用以下内容:

 $('#my-special-div').fadeOut(); $('#my-special-div').parent().html("<%= escape_javascript(status_link(@wowza_app)) %>"); $('#my-special-div').fadeIn(); $('#my-special-div').hide(2000, function () { $(this).remove(); // here jQuery knows you are talking about 'my-special-div' }); 

你应该给你想要更新ID的元素(我在最后添加了一个元素到哈希):

 link_to app.status, { :controller => :apps, :action => :live_status, :id => app }, {:remote => true, :class => "#{app.status} status", :id => app.id} 

现在,您可以使用相同的标识符来使用jQuery选择正确的元素:

 $("#<%= @wowza_app.id %>").fadeOut(); $("#<%= @wowza_app.id %>").parent().html("<%= escape_javascript(status_link(@wowza_app)) %>"); $("#<%= @wowza_app.id %>").fadeIn(); 

当然,这假设@wowza_app有一个名为id的方法,它返回相同的链接ID,但您可以根据需要修改变量以选择具有正确ID的元素。