使用Rails JS模板的正确方法是什么?

时间:2011-04-29 17:04:42

标签: javascript ruby-on-rails ajax

我不清楚如何很好地使用Rails JS模板。它们基本上取代了AJAX请求的成功回调,对吗?为什么将请求成功时执行的JS与为各种其他回调执行的JS分开是有意义的?

这当然假设我将点击处理程序或某些内容绑定到链接并以此方式发出AJAX请求。我当然可以使用link_to:remote => true。我想在这种情况下使用JS模板可能是有意义的。但是如果除了成功之外还需要处理其他情况,你会怎么做?将ajax:failure事件绑定到link_to生成的链接?这意味着在两个不同的地方维护与该链接相关的JS。如果有两个链接(例如,使用不同的标记)都会对该操作发出请求,但每个链接需要执行不同的JS,因为它们在单击时需要表现不同,会发生什么?你会如何使用JS模板处理它?<​​/ p>

我是否考虑过这个问题?

2 个答案:

答案 0 :(得分:1)

我认为最好的方法是避免使用js模板。尝试在ruby中编写js代码是一种失常...这是我的观点,但是替代方法更简洁,更简单,因为您使用实际语言编写代码。 因此,编写调用链接中提供的url的javascript,然后在json中询问内容。在你的控制器中,只需返回json中的数据(它可以是带有数据的对象列表,或者只是一个对象,如:{success:true}或{success:false}。然后在你的js中你对待对象并制作适当的行动。在指向相同网址的不同部分,您可以在js中采取不同的行动。

答案 1 :(得分:0)

您将使用嵌入式Ruby(因为您的javascript模板是js.erb文件)。

如果您希望根据成功或失败执行不同的javascript集 你会做类似的事情:

控制器:

def my_action
  #some code
  @success = true #or false
  respond_to do |format|
    format.js #you may need to add render :layout => false
    format.html #html fallback 
  end
end

然后在my_action.js.erb视图中:

<% if @success %>
  //Some javascript for success
<% else %>
  //Some javascript for failure
<% end %>