Backbone.js 和 Require.js

Backbone.js and Require.js

我想用 Require.js 创建 Backbone.js 应用程序。 但是我在控制台中有一个错误:未捕获错误:尚未为上下文加载模块名称 "underscore":_。使用 require([])

require.config({
        baseUrl: 'js/',
        paths : {
            'jquery' : 'jquery',
            'underscore' : 'underscore',
            'backbone' : 'backbone',
            shim: {
                'underscore': {
                    exports: '_'
                },
                'backbone': {
                    deps: ['underscore', 'jquery'],
                    exports: 'Backbone'
                }

            }
        }
    });

    define('app', ['jquery','backbone', 'underscore'], function ($, Backbone, _){

        var Model = Backbone.model.extend({});
        var model = new Model;
    });

    require(['app','jquery', 'backbone', 'underscore']);

我该如何解决这个问题?

您需要 Underscore.js,如您的要求声明中所列。

路径对象中提到了垫片。我不确定这是否是问题所在,但想在这里提及。

您仍然需要将 underscore 列为 paths 的一部分,以便您可以在垫片中引用它。另外,不确定你的目录结构是什么样的,但我写这篇文章时假设库代码在 /js/libs 目录中)。最后,请注意,您不需要 require app 的任何依赖项——RequireJS 的乐趣在于它会找出要加载的内容。

所以...

require.config({
    baseUrl: 'js/',
    paths : {
        'jquery' : 'lib/jquery',
        'underscore' : 'lib/underscore',
        'backbone' : 'lib/backbone',
    },
    shim: {
        'underscore': {
            exports: '_'
        },
       'backbone': {
            deps: ['underscore', 'jquery'],
            exports: 'Backbone'
        }

    }
});

define('app', ['jquery','backbone', 'underscore'], function ($, Backbone, _){
    var Model = Backbone.Model.extend({});
    var model = new Model({
        foo: 'bar'
    });

    var app = {
        model: model
    };

    // ...

    return app;
});

require(['app'], function(App) {
    App.model.get('foo'); // <<=== returns 'bar'
});