js执行.仅当某些条件为真时才用动词

Execute js.erb only if some condition is true

本文关键字:条件 执行 js      更新时间:2023-09-26

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

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

如果这个Ajax在onchange事件上执行,那么您将传递一个稍后可以在.js上计算的值。erb文件。例如:

假设事件发生在text_field_tag

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

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

<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"参数的值,然后决定采取哪些操作。例如:

(Show method in your controller)

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

js。动词文件

<% 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 %>

还请记住,如果你想处理数据库更新,你也可以在你的控制器中做一个'case',并在满足条件时管理你的数据库更改