1

私はCoffeeScriptで次の(非常に単純な)モジュール定義を持っています:

# backbone/routers/appointments_router.js.coffee
define ["app", "underscore", "backbone"], (App, _, Backbone) ->
  console.log(Backbone)

そして、ここに私の設定とものがあります:

# application.js.coffee
requirejs.config
  paths:
    underscore: "lodash.min"
    backbone: "backbone"
    appointmentsRouter: "backbone/routers/appointments_router"
    "backbone-relational": "backbone-relational"

requirejs ["app", "underscore", "backbone", "appointmentsRouter"], (App, _, Backbone, AppointmentsRouter) ->

何が起こっているのか: Backbone が依存関係としてリストされているにもかかわらず、ページをロードするundefinedと、コンソールが表示されます。さらに困惑しているのはBackbone、コンソールに入力すると Backbone定義されていることです。

バックボーンが最終的に評価されているのに、私appointments_router.js.coffeeがバックボーンについて知らないというのはどうしてでしょうか?

4

1 に答える 1

1

アンダースコアまたはバックボーンは AMD に準拠していないため、パスを定義するだけでは不十分です。幸いなことに、Require.js はこれに対する答えとして -shim機能を提供します。

したがって、このようなものを追加する必要があります

requirejs.config( // shouldn't this be just require?
  paths: ..., // don't change these
  shim: {
    "underscore": {
      exports: "_" // define the export
    },
    "backbone": {
      deps: ["underscore"], // define dependencies for backbone
      exports: "Backbone"
    }
  }
);

お役に立てれば!

于 2012-08-14T13:51:04.080 に答える