requirejs骨干有时候没有正确加载

时间:2016-01-03 15:22:29

标签: backbone.js requirejs

三分之一时我得到“骨干未定义错误”。它指向requirejs文件中的第19行(路由器在路径第21行中声明)。有时主干的加载速度足够快,有时则没有。我不知道我做错了什么。下面是requirejs文件的一部分和初始化。

require.config({
    paths: {
        //libs
        jquery: '../../bower_components/jquery/dist/jquery.min',
        // "jquery-ui": '../bower_components/jquery-ui/jquery-ui.min',
        lodash: '../../bower_components/lodash/lodash',
        backbone: '../../bower_components/backbone/backbone-min',
        underscore: '../../bower_components/underscore/underscore-min',
        gridstack: '../../libs/gridstack/dist/gridstack',
        text: '../../bower_components/text/text',                                   
        router: '/client/js/router/router',
        //other modules ...
    }

    shim: {
        "backbone": {
            deps: ['underscore','jquery'],
            exports: "backbone"
        },

        "underscore": {
            exports: "_"
        },
        "jquery": {
            exports: "$"
        },
        "gridstack": {
            deps: ['jquery','underscore'],
            exports: "Gridstack"
        }
    });

require([
  'jquery', 'backbone', 'lodash', 'router', 
], function( $, Backbone, _, Router){
    new Router();
    Backbone.history.start();
});

以下是我的路由器的声明方式:

define('router',['appView'] , function(AppView) {
    var router = Backbone.router.extend({
    // etc/

1 个答案:

答案 0 :(得分:0)

我看到的一个错误是在RequireJS配置中的Backbone垫片中。不支持RequireJS的较旧版本的Backbone将导出全局变量Backbone,而不是backbone。所以...

"backbone": {
    deps: [ 'underscore', 'jquery' ],
    exports: 'Backbone'
}

请注意,1.1.1之后的任何版本的BackboneJS都支持AMD风格的模块,因此如果您使用的是最新版本,则根本不需要垫片。事实上,使用支持AMD的版本,但错误地声明了垫片,可能导致1-in-3失败......但是我必须看到一个正在运行的例子要确定无疑。