2011-10-25 4 views
4

backbone.js에서 중첩 모델 및 뷰를 사용하는 방법에 대한 일반적인 아이디어를 얻길 바랍니다.Backbone.js 중첩 된보기, 일반 아이디어

대화 상자가 여러 개 있고 각 대화 상자에 여러 개의 탭이 있다고 가정 해 보겠습니다. 특정 탭은 둘 이상의 대화 상자에서 재사용 될 수 있습니다. 각 탭은 매우 다르므로 동적으로 대화 상자에 새 탭을 추가 할 수 있습니다.

각 탭마다 다른보기를 갖는 것이 논리적 인 것처럼 보입니다. 또한 대화 상자는보기 여야합니다. 모델과 뷰가 모두 어떻게 어울리는 지에 대해서는 조금 분명하지 않습니다.

이 내 주요 질문 : 부모 뷰가 아이 뷰를 렌더링하고자한다면, 아마 필요

실제로 같은 것을 할 : 다음

var childView = new ChildView(); 

그리고를

this.$("#listOfChildViews").append(childView.el); 
에 jQuery를 사용

추가하기 전에 목록을 지우려면

this.$("#listOfChildViews").html(""); 

이렇게하는 것이 가장 좋은 방법입니까? 전체 목록을 추출한 다음 모든 새로운 개체를 만들어 한꺼번에 추가하기 때문에 조금 나쁘게 보입니다. 아마 'render'함수가 없으면 'renderInitially'그리고 간단히 'add'(새로운 childviews를 추가하기 위해)가 더 좋을 것입니다.

죄송합니다. 너무 죄송합니다.

+0

중첩 된 뷰를 모두 바인딩 해제하는 것을 잊지 마십시오. –

답변

5

닉,

나는 백본 모델의 힘을 버려야한다고 생각합니다.

대화 모델 (또는 TabContainer, 대화 상자가보기 개념처럼 들리므로)이 있어야합니다. 각 대화 상자에는 탭 컬렉션이 있습니다 (탭은 다시 뷰 유니버스에 있습니다).

초기 렌더링에서 DialogView의 모든 dialog.tabs 컬렉션을 TabView에 표시합니다.

그러면 DialogView에서 변경된 요소에 해당하는보기 만 대화 모델의 탭 모음 (추가, 제거, 재설정)에서 추가하고 제거 할 수 있습니다.

직접보기를 추가/제거하는 기능을 만들어야합니다. add 함수는 추가 된 탭에 대한 뷰를 생성하고 렌더링 한 다음이 뷰에 추가합니다. $ ("# listOfChildViews").

희망이 있습니다.

+0

답장을 보내 주셔서 감사합니다! 나는 너의 생각을 좋아한다. 몇 가지 더 구체적인 질문 ... DialogView에는 대화 상자 모델이 있고 대화 모델에는이 컬렉션이 있으므로 대화 모델이 뷰를 참조하지 않습니까? 이게 나에게 잘 보이지만,이게 괜찮 니? –

+0

다른 방법으로 말하자면, 참조는 다음과 같습니다 : DialogView> DialogModel> TabCollection> TabView> TabModel -이 유형의 디자인입니까? 아니면 큰 문제가 있습니까? –

+0

참조는 다음과 같습니다. DialogModel -> TabsCollection -> TabModel. DialogView -> DialogModel입니다. TabView -> TabModel. 모델에 대한 견해, 모델은 뷰에 대해 알지 못합니다. 또는 DialogView -> TabsCollection, TabView -> TabModel을 가질 수 있습니다. TabModel의 다른 이름,이 정보의 표시 방법에서 비롯된 것이 아니라 그 정보에 포함 된 정보의 종류가 더 있어야합니다. – dira

관련 문제