我正在使用EmberJS
RequireJS
个应用
在我的routes.coffee
文件中,我正在定义我的路由:
define ['jquery'
'ember'
'_'
'cs!myapp/myapp'
"cs!myapp/routes/index_route"
], ($, Ember, _, MyApp, IndexRoute) ->
alert "Inside myapp route"
MyApp.Router.map () ->
@resource "play", path: '/play', () ->
@resource "myapp", {}, () ->
@resource "games", {}, () ->
@route "next"
@resource "frames", {}, () ->
@route "commercial"
@resource "trivia", {}, () ->
@route "commercial"
@route "start"
@route "howItWorks"
@route "goodbye"
@route "readyToStart"
@route "noContent"
MyApp.IndexRoute = IndexRoute
具体来说,据我所知,这是一个define
而不是require
,因此它不应该执行该代码。但警报响起。那么发生了什么?
答案 0 :(得分:2)
您在答案中显示的define
确实不会立即调用您提供给它的工厂功能。 (工厂函数是您为define
提供的回调。)但是,只要某些内容需要alert
直接或间接,就会调用routes.coffee
中的routes.coffee
。如果routes.coffee
模块出现在require
来电或define
来电的相关性列表中,则需要require(['foo'])
模块。
请注意,可以要求模块而不使用它。 RequireJS不关心模块是否使用。它只关心需要一个模块。因此,像foo
之类的调用将需要模块require
并导致其工厂函数被调用,即使它在此{{1}}调用中未被使用。