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」宣言は、メインのApp(-namespace)をロードするときにバックボーンにアクセスできるようにする必要があります(そしてそれはdepsします)。

実際には、これは機能しません。

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

ルーターを拡張する関数$, _, Backboneから-parametersを削除します。requireシムはグローバル値をエクスポートするため、通常の依存関係の場合のように、シムを参照しrequireたり呼び出したりする必要はありません。define

それらをパラメーターとして渡すと、グローバル変数が混乱し、ほとんどの場合、それらは未定義になります。

于 2012-07-09T15:05:52.950 に答える