骨干.js和要求.js

Backbone.js and Require.js

本文关键字:js 骨干      更新时间:2023-09-26

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

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列为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'
});

填充程序在路径对象中提及。我不确定这是否是问题所在,但想在这里提及这一点。

您需要下划线.js如 require 语句中所列。