2012-12-04 2 views
1

많은 솔루션이 있다는 것을 알고 있지만 커뮤니티의 의견이 궁금합니다.모델 또는 컬렉션 생성자 내에 모델 또는 컬렉션 별 뷰 저장

일련의 모델과 컬렉션이 있습니다. 각 모델에는 세부 사항, 편집, 인쇄, 옆으로, 도움 등보기와 같은 여러보기가 있습니다. 컬렉션에는 종종 동일한 이름 (예 : 옆으로, 도움말 등)이있는보기가 있습니다.

내가 가진 한 가지 요구 사항은 모듈에서 코드를 구조화해야한다는 것입니다. 모듈이로드되지 않은 경우 응용 프로그램은 모듈의 기능을 추적 할 수 없습니다. 예를 들어 사용자에게 다른 사용자를 보거나 편집 할 수있는 권한이없는 경우 이런 일이 발생할 수 있습니다. 따라서 "사용자"모듈은로드되지 않습니다.

그래서 ...

나는 모델의 생성자를 할 수있는 모델과 컬렉션의 생성자 컬렉션에 대한 뷰 정의를 저장하기에 좋은 장소를 생각했다. 예 :

var User = (function(){ // module definition 

    // model definition 
    var Model = Backbone.Model.extend({ 
     initialize: function() { 
      // ... 
     } 
    },{ 
     Views: { 
      Details: Backbone.View.extend({ 
       // ... 
      }), 
      Aside: Backbone.View.extend({ 
       // ... 
      }), 
      Help: Backbone.View.extend({ 
       // ... 
      }) 
     } 
    }); 

    // collection definition 
    var Collection = Backbone.Collection.extend({ 
     model: Model, 
     initialize: function() { 
      // ... 
     } 
    },{ 
     Views: { 
      Aside: Backbone.View.extend({ 
       // ... 
      }), 
      Help: Backbone.View.extend({ 
       // ... 
      }) 
     } 
    }); 

    // add more code here 

    return { // make model and collection public 
     Model: Model, 
     Collection: Collection 
    }; 

})(); // end module definition 

나는 내 견해를 다른 곳에서 살릴 수 있다는 것을 알았지 만,이 접근법에는 내가 알지 못하는 상당한 결점이 있습니까? 아마도 메모리 누수 또는 덜 명확한 것이 있습니까?

감사합니다.

+0

흠 ... 내 질문의 일부분을 추측하고, 이것이 기본이라고 들리면 유감스럽게도 : 인스턴스를 만들 때 "보기"개체가 인스턴스마다 한 번 복사 될지 아니면 생성자에 추가하여 이러한 정의가 메모리에 한 번만 추가되도록 보장합니까? – luisgo

답변

0

여러분의 의견을 모델 및 컬렉션에 "클래스 메서드"로 추가하지 않는 것이 좋습니다. JavaScript의 프로토 타입 상속 인의 특성 때문에 모델 유형에 대해 생성자 함수에 속성을 추가하는 것이 실제로 클래스 메서드를 추가하는 것이 아닙니다. 이것이 메모리 누수와 같은 문제를 일으킬 지 여부에 관해서는 말할 수 없습니다.

이 구조를 사용하는 이유가 나열되지 않은 경우가 아니면 간단한 개체에서보기를 그룹화하는 것이 좋습니다.

목표가 코드를 모듈화하는 것이라면 require.js 또는 Marionette modules과 같은 것을 활용하거나 IIFE에서 "관련"코드를 그룹화하면됩니다.

당신이 정확히 Backbone.Model.extend 방법으로 전달되는 classProperties 어떻게되는지 등에 대한 을 알고에 관심이 있다면 그때는 annotated source에서 직접보고 추천 할 것입니다.

+0

나는 마리오네트에 대해 몰랐다. 나는 그것을 시도 할 것이다. 고맙습니다! – luisgo

0

require.js을 살펴보십시오. 모듈 로딩을 다루는 로직을 추가 할 수 있어야합니다. 일반적으로 당신은 여전히 ​​그것을 봐야만하고, 특히 text plugin으로 백본 애플리케이션을 구성하는 데 효과적입니다.

+0

내 응용 프로그램을 모듈화하기 위해 require.js를 사용합니다 :) 그러나 단일 모듈 내에서 적어도 모델, 컬렉션 및 각각에 대한 뷰를 갖습니다. 그래서 .. 위의 모든 코드를 require.js 모듈에 넣었다고 가정 해 봅시다. 생성자의 뷰를 어디에 두는 것이 당연한가요? – luisgo

+0

나는 그렇게하지 않을 것이다. MVC (또는 무엇이든)의 요점은 모든 것을 분리시키는 것입니다. 모든 것을 단일 구성 요소로 생각하십시오. 모델이 필요하고보기 또는보기가 아닌 다른 모델이 필요한 경우 응용 프로그램이 커지는 상황이 있습니다.모듈을 사용/사용 중지하는 다른 방법을 찾으십시오. require에서 모듈을 비활성화하는 것으로 충분합니다. 그 후에는 응용 프로그램에서 해당 모듈에 대한 참조 만 제거하면됩니다 (예 : 버튼을 비활성화 된보기로 숨김). – Xerri

+0

명명과 응용 프로그램의 특정 부분을 어디에 두어야하는지 생각합니다. 고맙습니다. 네가 옳아. – luisgo

관련 문제