2013-04-19 3 views
4

레이아웃을 CollectionView로 전달한 다음 내부의 영역을 조작하려고합니다.CollectionView (Marionette/Backbone)를 통해 레이아웃 전달 (및 영역 조작)

는 지금, 나는 성공적과 같이 (그것의 자신의 지역에있다)에 CollectionView으로 레이아웃을 보내고있다 : 다음 레이아웃이 렌더링지고 있음을 알 수

main_layout.main_region.show(new CollectionView({ 
    itemView: ALayout, 
    collection : someCollection 
})); 

. 그러나 'ALayout'의 영역을 수정 (또는 터치하는 방법)을 이해할 수는 없습니다. 이것을 할 수있는 방법이 있습니까? 결국, 나는 동일한 영역을 가진 각각의 내부에 레이아웃이있는 'pane'콜렉션을 얻으 려하고, 그 영역을 어떻게 든 페인트합니다.

또한 원래 ItemView를 CollectionView로 전달했지만 영역을 해당 ItemView에 추가하는 방법을 알 수있었습니다. 가능한 경우이 파일을 전달하는 파일 (레이아웃 또는 ItemView)에서이 영역을 제어하고 싶습니다.

아무도이 경험이 있습니까?


편집 : - CollectionView의 어린이 here에 대해 이야기이 문서에서 좋아, 그래서 나는 마리오 네트와 함께 제공되는 Backbone.BabySitter을 사용하여 힌트를 발견했다. 이제 코드가 이렇게 생겼습니다.

var collectionViewToUse = new CollectionView({ 
    itemView: ALayout, 
    collection : someCollection 
}); 

main_layout.main_region.show(collectionViewToUse); 

collectionViewToUse.children.each(function(view) { 
    console.log(view); 
    //This fails. 
    view.regionManagers.someRegion.show('HHHHHH'); 
    //So does this, if I run it instead 
    view.someRegion.show('Anything'); 
}); 

백본보기 인스턴스가 기록되고 있으므로 여기에 대해 생각하고 있습니다. 아무도이 단계에서 지역을 조작하는 방법을 말해 줄래?

답변

4

오케이,이 문제에 대한 답변을드립니다. 희망적으로 이것은 미래의 다른 누군가에게 도움이되기를 바랍니다!

답은 BabySitter를 사용하는 길에있었습니다. 기본적으로 CollectionView를 인스턴스화 한 다음 BabySitter를 사용하여 루프를 반복하고 각 뷰에 대해 작업을 수행합니다. 당신이 그것을 레이아웃 통과한다면 : 그러니까 기본적으로

var collectionViewToUse = new CollectionView({ 
    itemView: ALayout, 
    collection : someCollection 
}); 

main_layout.main_region.show(collectionViewToUse); 

collectionViewToUse.children.each(function(view) { 
    view.someRegion.show(new SomeView({model : view.model }); 
}); 

을, 당신이 컬렉션은 '뷰'를 통해 레이아웃 대신의 ItemView, 다음 루프를 볼 수 있으며 지역에 새로운 전망을 통과 전달할 수 있습니다.

개선 사항이나 다른 사람에게 도움이 되었으면 말씀해주십시오.

+0

이 오류는 레이아웃이 아닌 ItemView를 지정해야한다는 것을 알려줍니다. – dstarh

+0

이상한. 내 프로젝트에서 프로덕션 작업을하고 있습니다. 오류 /와 요점을 게시 할 수 있습니까? Marionette/Backbone의 어떤 버전을 사용하고 있습니까? 관심이 있다면, 코드 일부를 게시하고 그것을 광산과 비교해 보겠습니다! – streetlight

+0

그래, 그게 내 코드 문제 였어. 나는 복합보기와 onCompositeCollectionRendered에서 이것을하고있다. 내가 chidren.each view.someRegion을 호출 할 때 정의되지 않았습니다. – dstarh

1

로직을 외부에서 수정하는 대신 컬렉션 자체 내부에 로직을 캡슐화하여 약간의 수정을 발견했습니다. 모델이 하위보기 중 하나에 전달 만이 동안 게시

var collectionViewToUse = new CollectionView({ 
    itemView: ALayout, 
    collection : someCollection, 

    onBeforeItemAdded: function(view) { 
     view.on('show', function() { 

      view.someRegion.show(
       new SomeView({ 
        model : view.model // view.model is model of Layout 
       }) 
      ); 

     }); 
    } 
}); 

main_layout.main_region.show(collectionViewToUse); 

모든 답변은 Layout에 부착되는 model의 고통.

관련 문제