0

在 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();
});

构建.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"]
        }
    ]    
})

我仍然被骨干和requirejs弄湿了。非常感谢任何反馈。

4

2 回答 2

0

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

其次,在 shim 中的主干 deps 数组中添加下划线。

于 2013-03-08T00:02:08.827 回答
0

我刚刚遇到了这个问题,您需要将 main.js 中的“垫片”添加到您的 build.js 文件中,并且会像魅力一样工作;)

于 2013-08-22T08:51:46.383 回答