2013-01-18 15 views
11

Bir küme karma görünümü şablonunda parametrelendirmenin bir yolu var mı? Görünümü başlattığım parametrelerin şablonda mevcut olacağını düşündüm ama işe yaramıyor gibi görünüyor.Parametre, omurga kukla kompozit görünüm şablonuna nasıl aktarılır

Views.myView = Marionette.CompositeView.extend({ 
    template: '#myView', 
    otherstuff... 
}); 


var collection = new App.Collection(); 
App.main.show(new Views.myView({ 
    collection: collection, 
    isMine: true 
})); 

şablonu:

<%= isMine %> 

Ve ne zaman şablon isMine oluşturulur tanımlanmamış:

cevap

17

Bunun için templateHelpers işlevi kullanabilirsiniz

Views.myView = Marionette.CompositeView.extend({ 
    template: '#myView', 
    serializeData: function() { 
     var viewData = {}; 
     viewData.isMine = this.options.isMine === undefined ? true : this.options.isMine; 
     return viewData; 
    }, 
    otherstuff... 
}); 
+1

+1 Bu doğru yöntemdir. Ayrıca herhangi bir şey merak ediyorsanız, bir fonksiyondan ziyade, düz bir nesneyi templateHelpers'a geçirebilirsiniz :) –

+0

Bir nesneyi geçerseniz de, "this" anahtar sözcüğüne doğrudan erişemezsiniz. (Üzgünüm, yorumumu düzenlememe izin vermez!) –

6

bu anlamaya freenode sohbet odası Brian-Mann biraz yardıma var. Değeri görünümden geçirdim, ancak serializeData yöntemini geçersiz kılarak asıl şablona bir özellik olarak göndermem gerekiyor.

Ayrıca, varsayılanı true olarak ayarlamak için bir kontrol yapıyorum, bu yüzden istemiyorsam, değeri geçmek zorunda kalmam.

-2

görüntüleyebilmek ': {ismine gerçek} modeli' model özelliğini ayarlayabilirsiniz. Mesela, farklı bölgeleri dolduran bir Düzenim var.

onRender: function() { 
      var contactInfo = this.model.get('contactInfo'); 

      this.contactInfoRegion.show(new ContactInfoView(
       { 
        model: contactInfo, 
        travelerNumber: this.travelerNumber, 
        numberOfTravelers: this.numberOfTravelers 
       } 
      )); 
} 

var ContactInfoView = Backbone.Marionette.ItemView.extend({ 
     model: ContactInfoModel, 
     template: Backbone.Marionette.TemplateCache.get(contactInfoTemplate), 
     templateHelpers:function(){ 

      return { 
       numberOfTravelers: this.options.numberOfTravelers, 
       travelerNumber: this.options.travelerNumber 
      } 
     } 
    }); 
İlgili konular