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) ->

这是发生了什么:当我加载我的页面时,我进入undefined了控制台,即使 Backbone 被列为依赖项。更令人费解的是,如果我Backbone在控制台输入,Backbone就被定义了。

Backbone 怎么会最终得到评估,但我appointments_router.js.coffee不知道 Backbone?

4

1 回答 1

1

Underscore 或 Backbone 不符合 AMD 标准,因此定义路径是不够的。幸运的是 Require.js 提供了 -functionalityshim解决这个问题。

所以你必须添加这样的东西

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 回答