为什么app / assets / javascripts中的咖啡文件会被加载到所有文件中?

时间:2016-12-14 09:08:43

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

我在app / assets / javascripts中有多个文件,为了测试,我在这个文件夹中写了一个文件: test.coffee:

$ ->
  $(document).ready ->
    alert("Hey");

我的问题如下:

为什么我在我的网站上访问的所有页面中都加载了javascript,我知道application.js中包含了这些,但我认为它没有优化,不是吗?

你怎么看? 你能告诉我一个优化的方法来在多个页面中进行ajax调用但是网站的所有页面都没有包含这些内容吗? 其实我也喜欢这样:

<script type="text/javascript">
  $(document).on('keyup', 'input#field_seller_name', function(e){
    if(e.keyCode == 13 && $(this).val() != ""){
      $.ajax({
        url: '/field_sellers/' + $(this).parent().parent().data('field_seller_id'),
        type: 'PUT',
        dataType: 'script',
        data: {
          field_seller: {
            name: $(this).val()
          }
        },
        error: function(result){
          alert(result.responseText);
        }
      });
    }
  });

</script>

我将这部分代码放在一个文件中并且只在一个页面中加载我认为它不干净... 否则我喜欢这样:

$ ->
  # This is for CREATE an new type_material by press enter touch with input in focus
  $(document).on 'keyup', '#name_new_type_material', (evt) ->
    if evt.keyCode == 13
      $.ajax '/type_materials',
        type: 'POST',
        dataType: 'script',
        data: {
          field_type_user: {
            name: $(this).val()
          }
        }

但就像我在顶部说过的那样,它被加载到所有网站......

Linguee帮我写了这个问题......

谢谢!

1 个答案:

答案 0 :(得分:0)

  

为什么app / assets / javascripts中的咖啡文件会加载到所有文件中?

这是设计上的。您的views/layouts/application.html.erb加载了javascript文件application.js。如果您转到app/assets/javascripts/application.js,则会看到加载所有资产的说明。由于application.js已加载到您的所有网页上(由于它位于布局模板中),因此所有资源都会加载到所有网页上。

您可以做的是创建另一个“主”文件。比方说,app/assets/javascripts/application-with-custom-ajax.js并在其中加载您的其他逻辑(而不是在application.js中加载)。然后,您只需确保在需要其他逻辑的页面上包含此备用文件而不是application.js