RequireJS如何决定运行什么以及加载什么?

时间:2014-02-24 20:40:11

标签: javascript ember.js requirejs

我正在使用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,因此它不应该执行该代码。但警报响起。那么发生了什么?

1 个答案:

答案 0 :(得分:2)

您在答案中显示的define确实不会立即调用您提供给它的工厂功能。 (工厂函数是您为define提供的回调。)但是,只要某些内容需要alert直接或间接,就会调用routes.coffee中的routes.coffee。如果routes.coffee模块出现在require来电或define来电的相关性列表中,则需要require(['foo'])模块。

请注意,可以要求模块而不使用它。 RequireJS不关心模块是否使用。它只关心需要一个模块。因此,像foo之类的调用将需要模块require并导致其工厂函数被调用,即使它在此{{1}}调用中未被使用