2012-09-21 7 views
8

내가 몇 가지보기로하고 모델 모듈의 정의에서이 작업을 수행하는 액세스 할 필요가있는 모델이 I과 같이 즉시 인스턴스화 해요 :RequireJS가있는 싱글 톤 백본 모델 : 안티 패턴?

define([ 
    'jquery', 
    'underscore', 
    'backbone' 
], function(_, Backbone) { 
    var Foo = Backbone.Model.extend({ 
     // wondrous methods and properties 
    }); 

    return new Foo(); 
}); 

는 난 단지 정말이 모델의 하나 개의 인스턴스가 필요합니다 - 바로 지금입니다. 이 문제를 해결하기위한 방법은 별도의 App 모듈을 사용하는 것입니다. 뭔가 같은 :

require([ 
    'App', 
    'Foo' 
], function(App, Foo) { 
    App.models.foo = new Foo(); 
}); 

하지만이 같은 느낌 당신은 기본적를 가지고 다시거야 때문에 가난한 대안 : 당신은 응용 프로그램 시작시 객체에 저장하는 참조를 인스턴스화 할 수있는

define([], function() { 
    var App = { 
     routers: {}, 
     models: {}, 
     views: {} 
    }; 

    return App; 
}); 

전역 네임 스페이스 - 이것은 RequireJS가 피해야하는 것으로되어 있습니다.

위에서 설명한대로 싱글 톤 모델을 사용하지 않으려는 다른 이유가 있습니까?

+0

첫 번째 예에서 한 것처럼 완전히 멋지게 작성해야합니다. –

답변

3

네임 스페이스를 만들 필요가 없습니다. 첫 번째 예는 싱글 톤을 만듭니다. 이 모듈이 필요할 때마다 모델의 동일한 인스턴스를 가져옵니다. 따라서 새로운 App 모듈을 생성하고 거기에 인스턴스를 저장하는 대신 첫 번째 예제 모듈을 직접 요구하십시오. 우리는 앱에서 싱글 톤 인스턴스를 사용하기 위해 앱에서 이것을 사용하며, 이것으로 함정을 볼 수 없습니다.