调用 RequireJS "define"函数之前回调?


我是Backbone

的新手,我正在帮助维护一个应用程序,该应用程序具有许多Backbone和RequireJS代码,其功能如下:

define(
    ['backbone', 'underscore'],
    function(Backbone, _) {
      // some code here
    }
);

我想在每个页面中配置下划线...在最简单的意义上,我可以做这样的事情:

define(
    ['backbone', 'underscore'],
    function(Backbone, _) {
      // do some stuff to configure underscore
      configureUnderscore(_);
    }
);

但我想保留每个页面的 define 函数,只需注入一个在调用define回调之前调用的回调。

如何使用 Backbone 或 RequireJS 完成此操作?

最简单的方法可能是定义一个名为(例如)rawUnderscore的requireJS模块,该模块无需任何配置即可返回Undercore。

然后,创建一个名为 underscore 的新模块,该模块需要rawUnderscore并在返回其值之前对其进行配置。

以下是如何

按照本页另一个答案中的建议进行这项工作,并从此 StackOverflow 答案复制到类似问题:

主.js

requirejs.config({
    paths: {
        'underscore': 'underscoreConfig',
        'originalUnderscore': 'underscore'
    },
    shim: {
        'originalUnderscore': {
            exports: '_'
        }
    }
});

下划线配置.js

define(['originalUnderscore'], function(_) {
    _.templateSettings =
    {
        evaluate    : /<%([sS]+?)%>/g,
        interpolate : /<%cleanHtml([sS]+?)%>/g,
        escape      : /<%[=-]([sS]+?)%>/g
    };
    return _;
});

另一种方法(完全未经测试)可能是在包含require.js之前定义一个"require"变量,如Require.JS文档和此处所述

<script>
    var require = {
        deps: ["some/module1", "my/module2", "a.js", "b.js"],
        callback: function(module1, module2) {
            //This function will be called when all the dependencies
            //listed above in deps are loaded. Note that this
            //function could be called before the page is loaded.
            //This callback is optional.
        }
    };
</script>
<script src="scripts/require.js"></script>

最新更新