2016-09-07 6 views
0

마리온트 3.0을 사용합니다.지역에서 새 하위보기가있는보기 빌드

가변 개수의 영역을 가질 수있는 BlockView가 있습니다. 이 영역은 CollectionViews 인 BlockRegionViews로 채워지고 (이들은 2.x에있을 것입니다)이 뷰는 추가 BlockView를 렌더링합니다. 영역이 이미 (빈) BlockRegionViews로 채워진 BlockView를 만들고이 BlockView를 반환하는 함수를 작성하고 싶습니다. 물론

var blockView = new BlockView({model: blockModel}); 
var regions = blockModel.get('regions') 
for(var i in regions) { 
    var blockRegionModel = regions[i]; 
    var blockRegionView = new BlockRegionView({model: blockRegionModel}); 
    blockView.addRegion(blockRegionModel.get('position'), '...regiondefinition...'); 
    var region = blockView.getRegion(blockRegionModel.get('position')); 
    // This is the line where i get the error. 
    region.show(blockRegionView); 
} 
return blockView; 

내 코드는 나쁜 :

은 그래서 나는이 코드를 작성했습니다. show 함수의 이름조차도 나에게 맞는 함수가 아니라는 것을 암시한다. (현재로서는 어떤 뷰도 보여주고 싶지 않기 때문에), 그러나 나는 문서에서 이와 같은 것을 찾을 수 없다.

그럼 내 질문은 : 다른 뷰를 렌더링하지 않고 영역을 초기화했는데 어떻게 렌더링해야합니까?

+0

CollectionViews는 여전히 Marionette 3.x 버전의 일부이지만 LayoutView 및 ItemView는 이제 View라고 불립니다 (어쨌든 매우 유사했습니다). – miphe

답변

0

정확하게 이해하면보기 내에서보기를 렌더링하고 모든보기가 초기화 될 때까지 아무 것도 렌더링하지 않으려합니다.

귀하의 설명에 귀하의 blockModel 및 지역 처리가 다소 혼란스러워서 귀하의 사례에 적용 할 수 있기를 바랍니다.

a View's lifecycle 주위의 문서가 유용합니다. 위의 예제에서 ChildView

var ChildView = Mn.View.extend({..}); 

var ParentView = Mn.View.extend({ 
    template: //.., 
    onBeforeRender: function() { 
    this.showChildView('reg1', new ChildView({model: someModel})); 
    }, 
    regions: { 
    reg1: //.. 
    } 
}); 

인스턴스화하고 렌더링 된 ParentView ParentView 전에 부착 될 것이다. 그러나 ParentView이 렌더링되면 ChildViews이 인스턴스화되어 해당 영역에 렌더링됩니다.

당신은 아무것도 렌더링하고 싶지 않다고 말씀하셨습니다. 드문 경우이지만 모든 렌더링 이벤트 외부에서 자식 뷰를 인스턴스화 할 수 있습니다.

var ChildView = Mn.View.extend({..}); 

var ParentView = Mn.View.extend({ 
    template: //.., 
    initialize: function() { 
    this.childView = new ChildView({model: someModel}); 
    }, 

    // You can decide whenever you want to show the childView 
    // and invoke this method. 
    showTheChildView: function() { 
    this.getRegion('reg1').show(this.childView); 
    }, 

    regions: { 
    reg1: //.. 
    } 
}); 

잘하면 질문을 올바르게 이해했습니다.