2014-02-24 3 views
1

나는 내 라우팅 정의하고있어 내 routes.coffee 파일에서 RequireJSRequireJS는 실행할 항목과로드 할 항목을 어떻게 결정합니까?

를 사용하여 EmberJS 응용 프로그램을 실행 해요 : 나는 그것을 이해, 그건 define 아닌 require의 구체적

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 

를, 그래서 shouldn 그 코드를 실행하지 마라. 그러나 경고가 울립니다. 무슨 일이 일어나고있는거야?

답변

2

대답에 표시되는 define이 사용자가 지정한 공장 기능을 즉시 호출하지 않는다는 것은 사실입니다. (팩토리 함수는 define에 콜백합니다.) 그러나 routes.coffee이 직접 또는 간접적으로 필요하면 alert (routes.coffee)이 호출됩니다. routes.coffee 모듈은 require 호출 또는 define 호출의 종속성 목록에 나타나는 경우 필요합니다.

모듈을 요구하고 사용할 수 없다는 점에 유의하십시오. RequireJS는 모듈이 인지인지 여부에 상관하지 않습니다. 모듈 만 있으면됩니다. 따라서 require(['foo'])과 같은 호출은 모듈 foo을 필요로하고 require 호출에서을 사용하지 않더라도 해당 팩토리 함수가 호출되도록합니다.

+0

'routes.coffee'는'main.coffee'의'define'에서 사용됩니다. 그래서'define'에있는 것만으로 실행된다는 뜻입니까? – Shamoon

+0

예. RequireJS가'main.coffee'를 적재하면'routes'를 포함하는'define' 호출에 전달 된 의존성 목록을 읽습니다, 그래서'routes.coffee'를 적재합니다, 그러면 그것의 팩토리 함수가 호출됩니다 및 경고. 그러나,'factory'를 호출하는'routes' 함수는 ** 정의 ** 호출이 아닙니다. 'define '의 팩토리 함수는 항상 * another *'define' 또는'require' 호출에 의해 실행됩니다. – Louis

관련 문제