2012-07-09 13 views
8

と使用自動ロード-depsの私はパスとシムを定義RequireJs構成定義されています:あなたが最後に「シム」宣言がバックボーンにアクセスすることができるようにする必要があります(参照、それはのDEPのよう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" 
     } 
    } 
}); 

を)私は主なアプリケーション(名前空間)を読み込むとき。

現実には、これは動作しません:

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

私は思っていますどのような "バックボーン-boilderplate" -project、バックボーン(およびそのDEPS)でこのよう利用可能であることである。 https://github.com/tbranyen/backbone-boilerplate/blob/master/app/main.js

これは関数内でこれを定義する必要さえありませんでした。

どうしたのですか?

+2

をルータを拡張する 'require'関数から' $、_、Backbone'を削除しようとします。私はシムが働くので、あなたはどんな呼び出しにも追加する必要のないグローバル値をエクスポートすることができると思います。 – jakee

+0

Hey、それは素晴らしいです:)私は定義関数のdeps-arrayに "backbone"これはすべてのモジュールでは機能しませんが...私は質問を閉じることができるように答えを作成しますか? –

+0

完了、私は助けることができてうれしい! – jakee

答えて

5

ルータを拡張するrequire関数から$, _, Backboneパラメータを削除します。シムはグローバル値をエクスポートするので、通常の依存関係と同様に、requireまたはdefineコールを参照する必要はありません。

パラメータとして渡すと、グローバル変数が混乱し、その結果、定義されていない可能性が高くなります。私が何を読んでから、

+1

精度:バックボーンをパラメータとして渡すと、グローバル定義が隠されます。直接window.Backboneを使うことができます – nikoshr

11

、requirejsあなたは、配列で指定した内容に基づいて、引数を渡す...したがって、あなたの呼び出しは次のようになります。

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

またはこのような:

require(
    ["jquery", "underscore", "backbone", "app"], // more deps 
    function ($, _, Backbone, App) { 
    } 
); 
+0

私はあなたに投票しました。私はこれについてjakeeに同意しない。 – Constantine

+0

私も同意します。依存性をカプセル化することがAMDの全ポイントです。このようにすれば –

+0

のようになりますが、ここでは変数がカプセル化されていますが、乾いた原理には合致しません。突然の 'app'のすべてがそこにリストアップされたものより多くの依存関係を持っているとしましょう。 – Toskan