requirejs + backbonejs + optimizer = backbone undefined

时间:2013-03-07 19:42:09

标签: backbone.js requirejs

在indexview模块中不会调用Backbone。

使用requirejs 2.1.5 / 2.1.4和backbonejs 0.9.10

运行r.js后

main.js

...
// this is causing the backbone to return 
// null/undefined in the next define call below
define("backbone", function(){}); 

define('views/index/IndexView', [
    'underscore',
    'backbone',
    'text!templates/index/indexTemplate.html'  
], function(_, Backbone, indexTemplate){

    console.log(Backbone); // returns undefined
    var IndexView = Backbone.View.extend({
...

但是如果我取出第一个将骨干作为模块注册的定义调用,那么一切 工作良好。但是backbone-min.js会单独加载。但就目前而言,这是唯一的方法 使脚本运行。我在这里肯定遗漏了一些东西。

main.js

require.config({
    paths: {
        underscore  : 'libs/underscore/underscore-min',
        backbone    : 'libs/backbone/backbone-min'
        templates   : '../templates'
    },
    shim: {        
        'backbone': {
            deps: ['jquery','underscore'],
            exports: 'Backbone'
        }
    }
});

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

build.js

({
    appDir: "../",
    baseUrl: "js",
    dir: "../../build",
    optimize: "none",
    paths: {
        "jquery": "libs/requirejs/require-jquery",
        "underscore" : 'libs/underscore/underscore-min',
        "backbone": 'libs/backbone/backbone-min',
        "templates": '../templates',
    },
    modules: [
        {
            name: "main",
            exclude: ["jquery"]
        }
    ]    
})

我仍然在用骨干和必需品弄湿我的脚。 任何反馈都非常感谢。

2 个答案:

答案 0 :(得分:0)

首先,您不需要定义('骨干',...)。无论如何,这部分是什么?您不需要将Backbone定义为模块。 Requirejs正在完成使Backbone可供您在整个框架中使用的工作。正如您在代码中看到的那样,通过调用Backbone.View.extend(),Backbone已经存在。如果要检查它,请不要使用console.log,而是使用console.dir。在chrome检查器中,它可以很好地格式化输出。

其次,将下划线添加到垫片中的骨干deps数组中。

答案 1 :(得分:0)

我刚刚遇到这个问题,你需要将main.js中的'shim'添加到你的build.js文件中,并且会像魅力一样工作;)