处理require.js

Dmi*_*ink 2 requirejs backbone.js

我想我并不完全理解require.js的工作方式.这是我创建的一个简单模块:

requirejs.config({
  paths: {
    'underscore'    : 'libs/underscore-min',
    'backbone'      : 'libs/backbone-min'
  }
});

define([
  "underscore",
  "backbone"
  ], function(_, Backbone) {
    console.log(_);
    console.log(Backbone);
    var MyCollection = Backbone.Collection.extend({
        initialize: function() {
            this.on("all", function(event) {
                console.log(event);
            });
        }

    });

    return MyCollection;
});
Run Code Online (Sandbox Code Playgroud)

我从我的HTML加载它:

<script data-main="js/mycollection.js" src="js/libs/require.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

问题是它间歇性地工作.有时我需要Backbone对象在函数中,有时它不会(并且给我http://requirejs.org/docs/errors.html#notloaded错误).如果我只是在浏览器中重新加载,我会得到50/50的更改工作.

我必须在这里遗漏一些非常基本的东西,报告的错误对我没有任何意义,我认为require.js机制的全部想法是只有在加载所有依赖项时才会调用我的函数.

Ste*_*eer 5

由于Underscore和Backbone尚未定义为AMD模块,因此require.js不知道Underscore是Backbone的依赖项.所以我想在50%的情况下发生的事情是当Backbone尝试使用它时,Underscore没有被加载.

您可以使用require.js shim config http://requirejs.org/docs/api.html#config-shim告诉require.js有关依赖关系结构的信息.