8

Sto provando a utilizzare due modelli in una vista e il modello che utilizza entrambi. Sto lavorando con Marionette. Qui sono io l'inizializzazione della vista:Modelli di due modelli in una vista: Backbone/Marionette

main_app_layout.header.show(new APP.Views.HeaderView({ 
model: oneModel, 
model2 : twoModel} 
)); 

Qui è la mia opinione:

APP.Views.HeaderView = Backbone.Marionette.ItemView.extend({ 

    template : '#view_template', 

    className: 'container', 


    initialize: function() { 
       //This correctly logs the second model 
       console.log(this.options.model2); 

    } 

}); 

E qui è il modello:

<script id="view_template" type="text/template"> 
     <p>{{twoModel_label}} {{oneModel_data}}</p> 
     <p>{{twoModel_label2}} {{oneModel_data2}}</p> 
    </script> 

rende tutto correttamente utilizzando i dati oneModel, ma non esegue il rendering del secondo, anche se lo registra correttamente. Sto usando i baffi come linguaggio dei miei modelli.

Qualcuno può aiutare?

risposta

16

È può ignorare il metodo serializeData sulla vostra vista e lo hanno restituire dati entrambi i modelli:


APP.Views.HeaderView = Backbone.Marionette.ItemView.extend({ 

    // ... 

    serializeData: function(){ 
    return { 
     model1: this.model.toJSON(), 
     model2: this.options.model2.toJSON() 
    }; 
    } 

}); 

Poi il modello sarebbe simile a questa:

<script id="view_template" type="text/template"> 
    <p>{{model1.label}} {{model1.data}}</p> 
    <p>{{model2.label}} {{model2.data}}</p> 
</script> 
+0

Questo è fantastico - grazie per aver risposto a Derick! (Adoro Marionette, comunque!). Tuttavia, continuo ad avere l'errore che model2 non è definito (in particolare, non è possibile chiamare il metodo 'toJSON' di undefined) - esiste un modo specifico per passare il secondo modello in modo diverso dal mio modo originale? – streetlight

+0

Ho risolto questo problema cambiando model2 in this.options.model2! Grazie ancora! – streetlight

+1

oops! giusto ... this.options.model2 :) –