2013-05-13 10 views
8

Demek ki kukla kullanarak bir proje üzerinde çalışıyoruz ve şu ana kadar iyi bir ilerleme kaydettik, ama biz kukla iç içe bakış modelinin bir parçası ile mücadeleİki Koleksiyonları

böylece sağlar varsayalım biz bir daire (bir kompozit görünüm olarak temsil edilir) var ve daire bir oda koleksiyonu ve sandalye koleksiyonu içerir, ne yapmak istiyoruz oda ve sandalyeler doğrudan aprtment kompozit görüş aşağı inen var, nasıl yapabiliriz Kompozit görünümün yalnızca bir çocuk koleksiyonuna sahip olabileceğini bilerek, bölgeleri kullanıyor muyuz?

cevap

3

Bunu yuvalanmış kompozit görünümler ile yapabilirsiniz. Açıkladığınız kullanım durumu için, Daireleriniz ve Odalarınız için bir kompozit Görünüm yerleştirebilirsiniz.

Fiddle: http://jsfiddle.net/yCD2m/23/

Biçimlendirme

<div id="apartments"></div> 

<script type="text/html" id="appartment"> 
    <div> 
     <h2>Apartment: <%=apartment%></h2> 
     <ul></ul> 
    </div> 
</script> 

<script type="text/html" id="room"> 
    <h3><%=name%></h3> 
    <ul></ul> 
</script> 

<script type="text/html" id="chair"> 
    <b><%=chairType%></b> 
</script> 

JS

var apartments = [ 
    {apartment: '1a', rooms: [ 
     {name: 'master bed', chairs: []}, 
     {name: 'kitchen', chairs: [ 
      {chairType: 'stool'}, {chairType: 'stool'}]}, 
     {name: 'living room', chairs: [ 
      {chairType: 'sofa'}, {chairType: 'love seat'}]}] 
    }, 
    {apartment: '2a', rooms: [ 
     {name: 'master bed', chairs: []}, 
     {name: 'kitchen', chairs: [ 
      {chairType: 'shaker'}, {chairType: 'shaker'}]}, 
     {name: 'living room', chairs: [ 
      {chairType: 'sectional'}]}] 
    }]; 

var chairModel = Backbone.Model.extend({}); 

var roomModel = Backbone.Model.extend({ 
    initialize: function(attributes, options) { 
     this.chairs = new Array(); 
     _.each(attributes.chairs, function(chair){ 
      this.chairs.push(new chairModel(chair));  
     }, this); 
    }   
}); 

var ApartmentModel = Backbone.Model.extend({ 
    initialize: function(attributes, options) { 
     this.rooms = new Array(); 
     _.each(attributes.rooms, function(room){ 
      this.rooms.push(new roomModel(room));  
     }, this); 
    } 
}); 

var ApartmentCollection = Backbone.Collection.extend({ 
    model: ApartmentModel 
}); 

var ChairView = Backbone.Marionette.ItemView.extend({ 
    template:'#chair' 
}); 

var RoomView = Backbone.Marionette.CompositeView.extend({ 
    template: '#room', 
    itemViewContainer: 'ul', 
    itemView: ChairView, 
    initialize: function(){ 
     var chairs = this.model.get('chairs'); 
     this.collection = new Backbone.Collection(chairs); 
    } 
}); 

var ApartmentView = Backbone.Marionette.CompositeView.extend({ 
    template: '#appartment', 
    itemViewContainer: 'ul', 
    itemView: RoomView,  // Composite View 
    initialize: function(){ 
     var rooms = this.model.get('rooms'); 
     this.collection = new Backbone.Collection(rooms); 
    } 
}); 

var ApartmentCollectionView = Backbone.Marionette.CollectionView.extend({ 
    itemView: ApartmentView // Composite View 
}); 

apartmentCollection = new ApartmentCollection(apartments); 

apartmentCollectionView = new ApartmentCollectionView({ 
    collection: apartmentCollection 
});  

App.apartments.show(apartmentCollectionView); 
+0

Fiddle bozuk .... OP – Merlin

+0

Fiddle ile aynı prob kullanıyor. Bu, marionette bağımlılığı için raw.github referansıydı. –

+0

nope, hala SO soru ile ilgili herhangi bir yardım, ben @ marionette değilim ... Benim api çağrısı vaatler gerektirir..Sulc kahve yazıyor ... Kahve anlamıyorum ... http://stackoverflow.com/questions/24018350/nasıl kullanılır-marionettejs-to-tüketmek-api-çağrıları – Merlin

4

Bize denediniz Bunun yerine bir Düzenleme? bölgeleri ve bir öğe görünümünü destekler (gerekirse). Bunu kullanmam, mizanpajdaki çeşitli bölgeleri tanımlamaktır; Yerleşim şablonundaki her bölge ve diğer apartmanlarda koleksiyon görünümü veya öğe görünümü gösterin. Bu nedenle, örneğiniz için, apartman düzeniniz tüm apartman özelliklerini içerecektir ve bir sandalye bölgesi bir sandalye koleksiyonu görünümü içerecektir ve bir oda bölgesi bir oda koleksiyonu görünümü içerebilir.