【问题标题】:Execute js.erb only if some condition is true仅在某些条件为真时执行 js.erb
【发布时间】:2014-04-28 23:10:50
【问题描述】:

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

编辑关于如何从另一个咖啡脚本或 js 文件调用我的 index.js.erb 有什么建议吗?或者发送参数并在该文件中使用它们?

【问题讨论】:

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


    【解决方案1】:

    如果此 Ajax 在 onchange 事件上执行,那么您将传递一个值,稍后您可以在 .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 %>
    

    还请记住,如果您想处理数据库更新,您还可以在控制器中执行“案例”并在满足条件时管理您的数据库更改。

    【讨论】:

    • 是的,它被执行on('change')
    • 检查我修改后的答案
    • 谢谢,我在看这里之前实际上已经这样做了,但是答案很好。它比我做的更完整、更整洁。
    猜你喜欢
    • 2014-07-27
    • 2021-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多