2013-03-28 23 views
9

Bir düzenim var, ancak bilinmediği için tüm bölgelerini önceden tanımlayamıyorum.Bölgeleri Marionette yerleşimine dinamik olarak ekleyin

Yani sonradan bir ItemView oluşturulur ve onun için yatakta söyleyebiliriz bölgenin adı olarak görünümün kimliğini kullanarak düzeninde yeni bir bölge oluşturmak istiyorum:

layout.dynamicRegionName.show(newItemView); 

Ama döngüsel bağımlılık var İşte.

  1. Henüz görünümü render değil, bu yüzden kesin çünkü onun DOM öğesine bir referans

  2. bunu oluşturamazsa .addRegion() için Düzenin çağrısı kullanılmak üzere yapamaz bunu ben sahip örnek bir hata olduğuna inanıyoruz github içinde Marionette.Layout docs yılında onun .Show()

@DerickBailey arayarak dinamik olarak eklenen bölgeden DOM ağacına bağlı olsun istiyorum : layout.show(new MenuView());

ama teknik bu yaptığımız muktedir burada yani gerekiyordu ne yakındır:

layout.addRegion(VAR_WITH_NEW_REGION_NAME, aViewInstance); 

ve bu doğrudan görünüm örneği içine render düzeni içine yeni bir Bölge eklemek gerekir.

Bunu başarmak için başka bir yolunu mu özlüyorum? Bu bilinen bir eksik işlev midir? Olmaması için bir sebep var mı?

Bu önceki Q'nun farkındayım: "Dynamically add/remove regions to a layout" ama net/kesin bir yanıt göremiyorum.

cevap

19

Marionette v1.0 (son sürüm v1.0.2, şimdi) Layouts'ta dinamik bölgeleri destekler.


var MyLayout = Marionette.Layout.extend({ 
    template: "#some-template" 
}); 

var layout = new MyLayout(); 
layout.render(); 

layout.addRegion("someRegion", "#some-element"); 

layout.someRegion.show(new MyView()); 
+2

Yardımcı yanıt. Benim sorum şu. Öğenin (# bazı öğelerin) şablon içinde olması veya olmaması gerekir mi? Başka bir deyişle, şablon bu öğeyi içeriyor mu yoksa addRegion yöntemi benim için mi ekliyor? Bu http://stackoverflow.com/questions/20570284/creating-a-layout-that-accepts-a-variable-number-of-views-and-hence-regions –

+0

için soruma bakın. el. Yani addRegion biraz garip: -/ –

+0

Gerçekten 'garip' gibi değil. Bir bölge, belirli bir elemanın etrafına saran bir konteynırdır. Benzer şekilde, bir bölgeyi kaldırdığınızda DOM öğesini, yalnızca bölge nesnesini kaldırmaz. – backdesk