RequireJS依赖关系未定义

时间:2014-04-14 18:38:50

标签: backbone.js requirejs

我正在尝试将我在单独的util.js文件夹中创建的utils文件加载到我的Backbone应用程序中,但无论我用于RequireJS的配置如何,都会加载该文件通过Require(因为我可以在dev工具中看到它已加载),但在视图本身中始终未定义。据我所知,我似乎已经正确定义了文件并尝试了所有不同的RequireJS配置组合 - 在paths var中定义路径,定义pathsshim导出名称,根本不在require config中定义它,只是直接在视图定义中声明路径,但它总是未定义。

我的文件夹结构是:


js
 - views
 - controllers
 (etc)
 - utils
   - util.js

我试图加载的文件是:

util.js中


define(function() {
    return {
        showMessage: function() {
            console.log('show message');
        }
    }; 
});

就像我说的那样,我尝试了各种各样的需求配置。例如,目前我有:


require.config({
    paths : {
        underscore : 'lib/lodash',
        backbone   : 'lib/backbone-1.0.0',
        marionette : 'lib/backbone.marionette-1.1.0',
        jquery     : 'lib/jquery-2.0.3.min',
        //jquery     : 'lib/jquery-2.0.3',
        tpl        : 'lib/tpl',
        pnotify    : 'lib/jquery.pnotify',
        utils      : 'utils/util'
    },
    shim : {
        'lib/backbone-localStorage' : ['backbone'],
        underscore: {
            exports: '_'
        },
        backbone: {
            exports: 'Backbone',
            deps: ['jquery','underscore']
        },
        marionette: {
            exports: 'Backbone.Marionette',
            deps: ['jquery', 'underscore', 'backbone']
        },
        pnotify: ['jquery'],
        utils: {
            exports: 'utils'  
        } 
    }
});

require(['app'],function(app){
    app.start();
});

在我的调用视图中(修改为只显示utils import):

define([
    'utils'
], function (utils) {
    "use strict";

return Marionette.Controller.extend({ 
    initialize: function() {
        console.log(utils); // undefined
    }
});

});

我的所有其他骨干代码(视图,模型,集合等)加载正常,但我无法加载此文件。我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

你不应该需要垫片定义。路径声明应涵盖您的用例。

你定义的垫片告诉requirejs它应该寻找一个全局命名的' utils'提供给utils / util.js列为依赖项的任何模块。由于您在utils / util.js中使用requirejs语法而不创建全局,因此不应该使用填充程序。