2013-01-18 8 views
11

C'è un modo per ottenere un parametro in un modello di visualizzazione composito di marionette? Ho calcolato che qualsiasi parametro inizializzato con la visualizzazione sarebbe disponibile nel modello, ma non sembra funzionare.Come passare il parametro al modello di vista composito della marionetta di dorsale

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


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

modello:

<%= isMine %> 

E quando il modello è reso isMine è indefinito:

risposta

17

È possibile utilizzare la funzione templateHelpers per questo. Ad esempio, ho un layout che sul rendering riempie regioni diverse.

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 
      } 
     } 
    }); 
+1

+1 Questo è il metodo corretto. È anche possibile passare un oggetto dritto a templateHelpers, piuttosto che una funzione, se qualcuno si chiedesse :) –

+0

Anche se si passa in un oggetto, non si avrà accesso diretto alla parola chiave "this". (Mi dispiace, non mi permetterebbe di modificare il mio commento!) –

6

avuto qualche aiuto da brian-mann nella chatroom freenode di conoscere questo numero. Ho passato il valore alla vista, ma ho bisogno di inviarlo come una proprietà al modello attuale sovrascrivendo il metodo serializeData.

Ho anche eseguito un controllo per impostare il valore predefinito come true, in modo da non dover passare il valore se non lo si desidera.

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

È possibile impostare la proprietà del modello della vista 'del modello: {IsMine: true}'

Problemi correlati