2012-07-08 6 views
5

모듈화 된 (RequireJs) 백본 환경에서 네임 스페이스를 어떻게 사용하는지 확신하지 못합니다.백본에서 RequireJs와 함께 네임 스페이스를 사용하는 방법

내가 어떻게 생각하니 처럼 보일 수 있지만 이것이 올바른지 확실하지는 않습니다.

이 (main.js에 의해 실행하기)

define('App', ['underscore', 'backbone', 'Router'], function(_, Backbone, Router){ 
    function initialize(){ 
     var app = {}; // app is the global namespace variable, every module exists in app 

     app.router = new Router(); // router gets registered 

     Backbone.history.start(); 
    } 

    return { initialize: initialize } 
}); 

messages.js

define('MessageModel', ['underscore', 'backbone', 'App'], function(_, Backbone, App){ 
    App.Message.Model; // registering the Message namespace with the Model class 

    App.Message.Model = Backbone.Model.extend({ 
     // the backbone stuff 
    }); 

    return App; 
}); 

이 올바른 접근 방식인가, 아니면 내가 (잘못된 길에 완전히 오전 app.js 그렇다면 나를 교정하십시오!)

답변

5

TODO 백본 + 요구 사항 예를보십시오 :

https://github.com/addyosmani/todomvc

+0

안녕하세요, 코드를 살펴 보았습니다. 그게 내가 현재 RequireJs를 사용하는 방법이지만 네임 스페이스를 그리워합니다. (항상 "글로벌"변수가 하나도 없습니다.) –

+0

링크가 더 이상 작동하지 않습니다. (해당 리소스를 검색 할 위치는 무엇입니까?) – lucke84

+1

http://addyosmani.github.com/todomvc/dependency-examples/backbone_require/ –

1

는 시작 포스트에서 언급 한 것처럼 네임 스페이스를 사용하여 실제 예제 응용 프로그램을 찾았습니다 https://github.com/nrabinowitz/gapvis

그냥 다음 일

1

내가 백본에 새로 온 사람을 테스트해야하지만, 방금 읽은 requirejs 문서의 스 니펫.

모듈은 전역 이름 공간을 오염시키지 않는 범위가 넓은 개체를 정의한다는 점에서 기존의 스크립트 파일과 다릅니다. 명시 적으로 의존성을 나열하고 전역 객체를 참조 할 필요없이 이러한 종속성에 대한 핸들을 얻을 수 있지만 모듈을 정의하는 함수의 인수로 의존성을 수신합니다. RequireJS의 모듈은 모듈 패턴의 확장이며, 다른 모듈을 참조하는 전역을 필요로하지 않는다는 이점이 있습니다.

requirejs를 사용할 때 requirejs가 처리하므로 namespaces를 모두 잊어 버릴 수있는 것처럼 들립니다. 다르게 액세스 할 수 있습니다. 다른 모듈에서 액세스하려면 파일의 경로를 종속성 배열에두고 각 변수를 다음 함수에 제공합니다. 당신이 필요한 경우 볼 reading the docs 가치,

define(["folder/a-script", "folder/another-script"], function(AScript, AnotherScript) { 
     // In here the scripts are loaded and can be used, but are called by 
     // their relative name in the anonymous function. 
    } 
); 

어쨌든, 아마 어떤 경우에는 여전히 뭔가를 네임 스페이스에 대한 필요가 있지만 일반적으로 생각합니다.

관련 문제