Javascript RequireJS如何决定运行什么和加载什么?
我正在使用Javascript RequireJS如何决定运行什么和加载什么?,javascript,ember.js,requirejs,Javascript,Ember.js,Requirejs,我正在使用RequireJS 在我的routes.coffee文件中,我正在定义我的路由: define ['jquery' 'ember' '_' 'cs!myapp/myapp' "cs!myapp/routes/index_route" ], ($, Ember, _, MyApp, IndexRoute) -> alert "Inside myapp route" MyApp.Route
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
具体地说,据我理解,这是一个
定义
而不是要求
,因此它不应该执行该代码。但是警报响了。那么发生了什么呢?确实,您在回答中显示的定义不会立即调用您赋予它的工厂函数。(factory函数是您给define
的回调)但是,routes.coffee
中的警报将在需要routes.coffee
时立即调用。如果require
调用或define
调用的依赖项列表中出现routes.coffee
模块,则该模块是必需的
请注意,可能需要一个模块而不使用它。RequireJS不关心模块是否被使用。它只关心需要一个模块。因此,像require(['foo'])
这样的调用将要求调用模块foo
,并导致调用其工厂函数,即使它未在该require
调用中使用。Myroutes.coffee
用于main.coffee的define
,那么,这是否意味着它只是在定义中运行?是的。当RequireJS加载main.coffee
时,它读取传递给define
调用的依赖项列表,您说该调用包含routes.coffee
,因此它加载routes.coffee
,从而调用其工厂函数并发出警报。但是,routes.coffee
中的define
调用不会导致执行自己的工厂功能。define
的工厂功能总是由另一个define
或require
调用执行。