Backbone.js和Require.js

时间:2015-01-31 16:05:35

标签: javascript backbone.js requirejs

我想用Require.js创建Backbone.js应用程序。 但我在控制台中出错: 未捕获错误:尚未为上下文加载模块名称“下划线”:_。使用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']);

我如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

您仍需要将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'
});

答案 2 :(得分:-1)

您需要{require}声明中列出的Underscore.js