So verwenden Sie Backbone.Marionette.ItemView mit Moustache

8

Der folgende Code funktioniert mit Backbone.Marionette.ItemView , aber nicht mit Mustache .

Backbone.Marionette.ItemView - kein Schnurrbart

Ich möchte den gleichen Code verwenden, aber die Vorlage mit Mustache laden.

Hier ist mein Code:

Backbone.Marionette.ItemView - mit Schnurrbart

Irgendeine Idee, warum mein Code nicht funktioniert und warum?

Danke

    
Lorraine Bernard 18.06.2012, 13:33
quelle

2 Antworten

8

Marionette setzt die Verwendung von UnderscoreJS-Vorlagen standardmäßig voraus. Das Ersetzen der template -Konfiguration für eine Ansicht reicht nicht aus. Sie müssen auch ersetzen, wie der Rendering-Prozess funktioniert.

In Ihrem einfachen Beispiel müssen Sie nur die Funktion Marionette.Renderer.render überschreiben, um Moustache aufzurufen, und dann template Ihrer Ansichten auf die gewünschte Zeichenfolgenvorlage setzen:

%Vor%

Beachten Sie, dass Ihr JSFiddle auch dann nicht funktioniert, wenn Sie diesen Code einsetzen, da GridView immer noch einen jQuery-Selektor / String als template -Attribut verwendet. Sie müssen dies durch den gleichen Typ von template function ersetzen, um den Schnurrbart zurückzugeben.

Ссылка

    
Derick Bailey 18.06.2012, 15:37
quelle
14

Ich möchte die Antwort hier ein bisschen auf den neuesten Stand bringen, da ich gerade damit zu kämpfen hatte; und ich benutzte diese Antwort als Referenz.

Hier sind meine Ergebnisse:

Die Antwort hier ist etwas veraltet mit der aktuellen Version von Moustache (was verständlich ist, da es ziemlich alt ist)

  • Moustache.to_html ist jetzt veraltet, aber immer noch als einfacher Wrapper um Moustache.render für Rückwärtskompatibilität vorhanden. Schauen Sie sich diesen Link an .

Außerdem habe ich festgestellt, dass das Überschreiben von Marionette.Renderer.render , wie in der oben stehenden Antwort, die Marionette.TemplateCache -Schicht umgeht, was möglicherweise nicht das gewünschte Verhalten ist.

Hier ist die Quelle für die Methode Marionette.Renderer.render :

%Vor%

Wie Sie sehen können, greift es auf die Methode Marionette.TemplateCache.get zu, und die obige Antwort trägt nicht dazu bei, diese Funktionalität beizubehalten.

Nun zu meiner Lösung (Anmerkung: Die obige Antwort ist nicht unbedingt falsch; dies ist nur mein Ansatz, um die Marionette.TemplateCache Ebene beizubehalten):

Übernehmen Sie, wie in den Kommentaren oben angegeben, stattdessen compileTemplate :

%Vor%

Hier ist ein funktionierender JSFiddle als Beweis .

In der Geige habe ich auch Marionette.TemplateCache.loadTemplate überschrieben, um zu demonstrieren, dass es nur einmal aufgerufen wird. Der Rumpf der Funktion fügt nur einige Debug-Ausgaben hinzu und implementiert dann die meisten ursprünglichen Funktionen (abzüglich der Fehlerbehandlung).

    
Aubricus 09.02.2014 23:26
quelle