8

我已经定义了一个定义路径和垫片的 RequireJs 配置:

require.config({
    // define application bootstrap
    deps: ["main"],

    // define library shortcuts
    paths: {
        app: "app"
        , jquery: "lib/jquery"
        , underscore: "lib/underscore"
        , backbone: "lib/backbone"
        , bootstrap: "lib/bootstrap"
    },

    // define library dependencies
    shim: {
        jquery: {
            exports: "$"
        },
        underscore: {
            exports: "_"
        },
        backbone: {
            deps: ["underscore", "jquery"],
            exports: "Backbone"
        },
        bootstrap: {
            deps: ['jquery'],
            exports: "bootstrap"
        },

        // main application
        app: {
            deps: ["backbone"],
            exports: "App"
        }
    }
});

如您所见,当我加载主应用程序(-命名空间)时,最后一个“shim”声明应该使其能够访问主干(及其依赖)。

实际上这不起作用:

require(["app"], function($, _, Backbone, App){
    app.router = new Backbone.Router.extend({
        // routing and route actions
    });
});

让我想知道的是,在“backbone-boilderplate”项目中,Backbone(及其部门)可以通过这种方式获得: https ://github.com/tbranyen/backbone-boilerplate/blob/master/app/main.js

甚至不必在函数中定义它。

那么我做错了什么?

4

2 回答 2

11

根据我的阅读,requirejs 根据您在数组中指定的内容传递参数...因此您的调用应如下所示:

require(["app"], function (App) { // less arguments
});

或者像这样:

require(
    ["jquery", "underscore", "backbone", "app"], // more deps
    function ($, _, Backbone, App) {
    }
);
于 2013-01-22T11:02:52.637 回答
5

从扩展路由器的 -function 中删除$, _, Backbone-parameters 。require垫片导出全局值,因此无需像常规依赖项那样在requiredefine调用中引用它们。

将它们作为参数传递会与全局变量混淆,并且很可能导致它们未定义。

于 2012-07-09T15:05:52.950 回答