【问题标题】:Wrap a few asset requires in a javascript closure在 javascript 闭包中包装一些资产需要
【发布时间】:2012-04-24 06:14:30
【问题描述】:

我有一个清单文件 partials.js,其中包含:

//= require_tree ./partials

然后./partials/ 中的每个咖啡文件都包含以下内容:

$ ->
  # Rest of the code

清单中是否可以有这样的东西:

$(function () {
//= require_tree ./partials
});

并删除单个文件中的 $ -> 包装?

(目前这实际上不起作用。代码被推到底部,上面有所需的js。)

【问题讨论】:

    标签: javascript ruby-on-rails asset-pipeline


    【解决方案1】:

    我最近遇到了同样的问题,我最终做的是:

    以您的清单示例:

    $(function () {
      //= require_tree ./partials
    });
    

    我们可以将其转换为如下所示的清单:

    //= require ./head
    //= require_tree ./partials
    //= require ./tail
    

    然后我们生成head.js:

    $(function (){ //need line to end with semicolon to trick preprocessor;
    

    然后我们生成tail.js:

    });
    

    诀窍是用带注释的分号结束 head.js 部分。否则,预处理器将尝试注入一个分号来破坏脚本,从而产生这样的结果

    $(function () {
    ;
      //rest of your code here
    });
    

    【讨论】:

    • 这种方法的缺点是你不能真正在非压缩模式下使用你的 JS。在开发过程中,Rails 会单独包含您的文件,因此您的 head.js 和 tail.js 会作为单独的文件出现(有错误)。
    • 作为我评论的后续,我通过将head.js 设为 erb 模板 (head.js.erb) 并使用 rails 环境来决定是否渲染函数的头部和尾部来解决该问题。
    【解决方案2】:

    另一种方法是创建一个 load_my_asset.js.erb 文件:

    function loadMyAsset() {
        <%= Rails.application.assets.find_asset('path/to/asset').source %>
    };
    

    在 application.js 中

    //= require load_my_asset
    

    在开发和生产中都有效

    【讨论】:

      猜你喜欢
      • 2011-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-18
      • 1970-01-01
      • 1970-01-01
      • 2019-07-21
      相关资源
      最近更新 更多