2012-05-24 6 views
0

저는 RequireJS를 처음 사용했지만 벽돌 벽을 치는 것처럼 보입니다.리프 모듈로드 요구됨

"app"모듈에서 문제가 발생합니다. RequireJS가 리프 모듈을로드하는 방법을 잘 모르겠다 - "app"에 의존하는 패키지.

나는 왜 그런지 이해하지 못한다고 생각합니다. 시스템의 어떤 것도 그들에 의존하지 않고 어디에도 등록되어 있지 않기 때문에이 경우를 다루어야합니다.

RequireJS가 이러한 모듈에 대해 알리고 적절히로드 할 수있는 방법은 무엇입니까?

건배

따라서
//index.html 
.... 
<script data-main="app/config" src="/assets/js/libs/require.js"></script> 
.... 

//config.js 
require.config({ 
    deps: [ "app" ], 
    paths: { 
     libs: "../assets/js/libs", 
     plugins: "../assets/js/plugins", 
     jquery: "../assets/js/libs/jquery", 
     underscore: "../assets/js/libs/underscore", 
     backbone: "../assets/js/libs/backbone", 
     marionette: "../assets/js/libs/backbone.marionette" 
    } 
}); 

//app.js 
require(
    [ "jquery", "underscore", "backbone", "marionette" ], 
    function ($, _, Backbone, Marionette) { 
     //.... 
    } 
); 

//app.view.js 
require(
    [ "jquery", "underscore", "backbone", "marionette", "app" ], 
    function ($, _, Backbone, Marionette, App) { 
     //.... 
    } 
); 

//app.route.js 
require(
    [ "backbone", "app" ], 
    function (Backbone, App) { 
     //.... 
    } 
); 

:

  • app.js는
  • app.view.js
  • 가에 달려있다 "JQuery와", "밑줄", "백본", "꼭두각시"에 따라 달라집니다 "JQuery와", "백본"을 "강조",
  • "꼭두각시는", "응용 프로그램"app.route.js는 "백본", "응용 프로그램"
에 따라 달라집니다

답변

2

docs -> http://requirejs.org/docs/api.html#config 종속성은 deps 배열에 정의되어 있습니다. require.js가 실행될 때 가장 먼저로드됩니다. require.js를로드하기 전에 종속성을 정의해야 할 때 주로 사용됩니다.

이 당신의 구조가 모든 라이브러리와 모듈은 AMD 준수해야한다는 것을 염두에

//config.js 
require.config({ 
    paths: { 
     libs: "../assets/js/libs", 
     plugins: "../assets/js/plugins", 
     jquery: "../assets/js/libs/jquery", 
     underscore: "../assets/js/libs/underscore", 
     backbone: "../assets/js/libs/backbone", 
     marionette: "../assets/js/libs/backbone.marionette" 
    } 
}); 

require(['app']); 

//app.js 
define(
    [ "jquery", "underscore", "backbone", "marionette" ], 
    function ($, _, Backbone, Marionette) { 
     //.... 
    } 
); 

//app.view.js 
define(
    [ "jquery", "underscore", "backbone", "marionette", "app" ], 
    function ($, _, Backbone, Marionette, App) { 
     //.... 
    } 
); 

//app.route.js 
define(
    [ "backbone", "app" ], 
    function (Backbone, App) { 
     //.... 
    } 
); 

곰 모양을합니다 그리고 당신은 app.view.js에서 같은 경로로 응용 프로그램을 사용하려는 경우 다음으로 정의해야합니다. require.config에 경로로 정의되지 않은 경우 [ "Backbone", "App"] 모듈을로드 할 수 없으므로 egis와 동일합니다.

// main.js 
define(["jquery", "app", "router"], function ($, App) { 
    "use strict"; 
    // domReady plugin maybe best used here? 
    $(function() { 
    App.start(); 
    }); 
}); 

// app.js 
define(["backbone", "marionette"], function (Backbone) { 
    "use strict"; 
    var app = new Backbone.Marionette.Application(); 
    app.on("initialize:after", function(options){ 
    if (Backbone.history){ 
     Backbone.history.start(); 
    } 
    }); 

    return app; 
}); 

// router.js 
define(["backbone", "controller", "marionette"], function(Backbone, controller) { 
    "use strict"; 
    var Router = Backbone.Marionette.AppRouter.extend({ 
    appRoutes: { 
     "": "index" 
    } 
    }); 
    return new Router({ 
    controller: controller 
    }); 
}); 

// controller.js 
define(["view"], function(View) { 
    return { 
    "index": { 
     new View(); // Do what you like here… 
    } 
    } 
}); 

// view.js 
define(["backbone"], function(Backbone) { 
    // view here 
}); 

내가 router.js에 대한 종속성이 app.js에 넣어하지만, 기본적으로 Backbone.history.start()에 대한 호출을로드 할 수있는 라우터를 필요로 할 수 있다고 가정합니다

+0

알겠습니다. 그러나 문제는 어떻게하면 RequireJS에 app.view.js와 app.route.js에 대해 알려주는 것입니까? 현재 시스템은 require ([ 'app'])로 인해 앱을 알고 있지만 app.view.js 및 app.route.js에 대해 알지 못하므로로드되지 않고 앱만로드됩니다. –

+0

로드하려는 항목이 필요하거나 정의해야합니다. app.view.js와 app.route.js를 사용하면 똑같이 할 수 있습니다. 일반적인 패턴은 app.js에서 앱을 시작하는 데 필요한 모든 것을 초기화한다는 것입니다. 그래서 app.js에서 정의 문에서 이것을 요구하고 다음과 같이 정의한 것에 대한 새로운 인스턴스를 생성합니다.'define ([ 'app.route.js', 'app.view.js'], function (appRoute , appView) {var route = new appRoute(); var mainView = 새 appView();}' – nimrod

1

이 내가 시동 어떻게 . 라우터가 컨트롤러에 종속되어 있습니다. 그것은 컨트롤러에 의해 사용되는보기 등 모든 종속성이 있습니다. 모델 및 컬렉션 등이있을 수 있습니다.

희망이 있습니다.