调用RequireJS“define”函数之前的回调?

时间:2014-03-05 14:49:56

标签: javascript backbone.js requirejs

我是Backbone的新手,我正在帮助维护一个拥有大量Backbone和RequireJS代码的应用程序,它们可以做到这样:

define(

    ['backbone', 'underscore'],

    function(Backbone, _) {
      // some code here
    }
);

我想在每个页面中配置Underscore ......从最简单的意义上说,我可以这样做:

define(

    ['backbone', 'underscore'],

    function(Backbone, _) {

      // do some stuff to configure underscore
      configureUnderscore(_);

    }
);

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

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

3 个答案:

答案 0 :(得分:1)

最简单的可能是定义一个名为(例如)rawUnderscore的requireJS模块,该模块在没有任何配置的情况下返回Undercore。

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

答案 1 :(得分:1)

以下是another answer on this page中建议的如何完成此工作,并从this StackOverflow answer复制到类似的问题:

main.js

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

underscoreConfig.js

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

答案 2 :(得分:0)

另一种方法(完全未经测试)可能是在包含require.js之前定义“require”变量,detailed here in the Require.JS docshere as well

<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>