2013-03-28 17 views
8

Próbuję użyć dwóch modeli w jednym widoku, a szablon przy użyciu obu. Pracuję z Marionetką. Oto ja inicjalizacji zdania:Szablon dwa modele w jednym widoku - kręgosłup/marionetka

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

tu jest mój widok:

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); 

    } 

}); 

A oto szablon:

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

To czyni wszystko poprawnie, wykorzystując dane oneModel, ale nie renderuje drugiego, nawet jeśli loguje go poprawnie. Używam Moustache jako mojego języka szablonowego.

Czy ktoś może pomóc?

Odpowiedz

16

Ty można zastąpić metodę serializeData na widoku i nie zwróci dane obu modeli:


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

    // ... 

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

}); 

Następnie szablon wyglądałby następująco:

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

To jest wspaniałe - dzięki za odpowiedź na Derick! (Uwielbiam Marionetkę, nawiasem mówiąc!). Jednak ciągle otrzymuję błąd, że model2 jest niezdefiniowany (konkretnie, Can not call method "toJSON" nieokreślonego) - czy istnieje specyficzny sposób przekazania drugiego modelu w inny sposób niż mój oryginalny? – streetlight

+0

Naprawiłem ten problem, zmieniając model2 na this.options.model2! Dzięki jeszcze raz! – streetlight

+1

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

Powiązane problemy