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
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:
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.
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)
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).
Tags und Links backbone.js mustache marionette