2012-12-02 8 views
10

È normale utilizzare Marionette.ItemView per le classi di viste che non hanno una specifica proprietà model associata?Utilizzo di Marionette.ItemView per le viste senza modelli?

Poiché Marionette.View non è stato progettato per essere utilizzato direttamente, sembra che un ItemView abbia senso come una classe di viste con valori predefiniti e associazioni convenienti.

Oppure, si dovrebbe ricorrere all'utilizzo di Backbone.View? In tal caso, esiste un modo per agganciare lo Backbone.View all'architettura evento e raccolta rifiuti di Marionette?

Grazie per i chiarimenti!

risposta

18

ItemView può essere utilizzato senza un modello. Lo faccio abbastanza regolarmente.

Se è necessario specificare i dati per un ItemView, ma non hanno i dati in un Backbone.Model, è necessario eseguire l'override del metodo serializeData:


MyView = Marionette.ItemView.extend({ 
    serializeData: function(){ 
    return { 
     my: "custom data" 
    }; 
    } 
}); 

il depliant di base Marionette.View' destinata ad essere usato direttamente perché non fornisce una funzione di rendering su se stesso. Ciò non significa che non puoi usarlo per creare i tuoi tipi di vista di base, però. Ad esempio, potresti creare un tipo di visualizzazione per la tua applicazione che si occupa del rendering di google maps o di un widget di terze parti o qualcos'altro che non ha bisogno del rendering generale Backbone.Model basato su ItemView.

1

ho appena scoperto è possibile utilizzare un templateHelper per questo - basta buttare questo nella vostra dichiarazione ItemView:

templateHelpers: function() { 
    return { 
     message: this.message, 
     cssClass: this.cssClass 
    } 
} 

E poi nel modello:

<script type="text/html" id="notice-template"> 
    <span class="<%= cssClass %>"><%= message %></span> 
</script> 

E poi quando si inizializzare il view:

var noticeView = new App.Views.Notice(); 
noticeView.message = "HELLO"; 
App.noticeRegion.show(noticeView); 

Sarei interessato ai tuoi pensieri su questo Derick?