Javascript / Jquery 选择器 ($) 在 rails def

Javascript / Jquery selector ($) in a rails def

我在 html.erb 文件中有以下代码。它适用于该页面。我想将它移动到应用程序控制器中的 def 中。当我尝试这样做时, $ 显示为意外的坏字符。

有没有办法将此代码移动到 def 中?

<!-- --------------   Begin Dirty Form Checker   -->

<%= javascript_include_tag "jquery.are-you-sure.js" %>
<%= content_for(:body_attributes) do %> data-no-turbolink <% end %>

<script>
    var do_on_load = function() {
        $('form').areYouSure( {'silent':false} );
        $('form').areYouSure();
    }
    $(document).ready(do_on_load)
    $(window).bind('page:change', do_on_load)
</script>

这是错误的。您没有将 javascript 放在您的 ApplicationController 中。 Rails 中的 Javascript 是一个视图问题,最佳做法是尽可能避免混合使用 Ruby(或任何其他服务器端语言)和 Javascript*.

您将 javascript 放入外部文件 (app/assets/javascripts/*.js)。与其以页面为基础考虑您的脚本,不如将 javascript 视为一组可扩展的行为,您可以将其添加到应用程序的元素中。

使用 classesdata-* 属性来定位元素,使用数据属性和 JSON 在客户端和服务器端之间传递数据。

// app/assets/javascripts/supa_form.js
$(document).on('page:change', function(){
  $('.supa-form').submit(function(){
    if (!window.confirm('Are you sure?')) {
      return false;
    }
  });
});

为什么?

  • 允许在部署时编译和最小化 javascripts。
  • 允许 javascripts 被有效缓存。
  • 允许 javascript 独立于 rails 应用程序进行测试。
  • 混合使用 javascript 和服务器端渲染的新手会对何时何地发生的事情感到困惑。
  • 避免混合数据和逻辑。

补充阅读: