仅当某些条件为真时才执行js.erb

时间:2014-03-21 14:11:47

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

我对cofeescript或js不太自信,所以我有点困惑。我有一个快速编辑功能,它发送一个AJAX请求并更新数据库。目前我正在手动更改编辑过的地方并显示它,但它看起来像是骗子,徽章不会更新!我想重新呈现我的具体帖子。我已经给了<li>一个data-id属性,所以我可以通过Post.find($(#li).data('id'))得到它的帖子(不太确定它是否有效但是应该有一种传递变量的方法。现在主要的问题是我的帖子/ index.js.erb上有其他脚本,我不想被执行。我只想要一个与此相关的部分在AJAX成功时执行(在另一个文件中)或{ {1}}。现在我不知道如何实现这个目标!这听起来像是一个简单的问题,但是我对如何处理所有其他脚本以及限制部分脚本的知识缺乏限制。

编辑有关如何从另一个coffeescript或js文件调用我的index.js.erb的任何建议?或者发送参数并在该文件中使用它们?

1 个答案:

答案 0 :(得分:3)

如果在onchange事件上执行此Ajax,那么您将传递一个值,以后可以在.js.erb文件上进行评估。例如:

让我们说事件发生在text_field_tag

的onchange上
<%= text_field_tag(:for_event, "", :onchange=> "TheAjax('identifier')") %>

然后声明一个函数(本例中为TheAjax)

<script>
   function TheAjax(identifier){
     var dataString = 'the_id='+identifier;
     $.ajax(
       {      
     type: "GET",  
     url: "/your_view_name/your_method",  
     data: dataString  
       }); 
      return false;
   }    
</script>

Ajax将传递一个名为“the_id”的参数,其值为“identifier”(当您在onchange方法中调用该函数时,该值将作为参数传递。

现在,在你的js.erb文件中(应该链接到你的一个控制器方法,例如show方法,你可以评估“the_id”参数的值,然后决定要采取的操作。)例如:

(在控制器中显示方法)

def show
 @my_identifier = params[:the_id] (session var so you'd access it on your js.erb file)
end

您的js.erb文件

<% case @my_identifier %>
   <% when 'identifier' %>
      Here you put whatever part of your JS you want to execute ONLY when the condition is met.
   <% else %>
      Whatever else you want to execute when the previous conditions are not met
<% end %>

另请注意,如果要处理数据库更新,还可以在控制器中执行“大小写”操作,并在满足条件时管理数据库更改。