EDIT: Diese Antwort ist alt und veraltet. Ich würde es löschen, aber es ist die "akzeptierte" Antwort. Ich werde stattdessen meine Meinung einbringen.
Ich würde das nicht mehr befürworten. Stattdessen würde ich alle Vorlagen in einzelne HTML-Dateien aufteilen. Einige würden vorschlagen, diese asynchron zu laden (Require.js oder eine Art Vorlagen-Cache). Das funktioniert gut bei kleinen Projekten, aber bei großen Projekten mit vielen Vorlagen stellen Sie beim Laden der Seite eine Menge kleiner asynchroner Anforderungen, die ich wirklich nicht mag. (ugh ... ok, Sie können es mit Require.js umgehen, indem Sie Ihre anfänglichen Abhängigkeiten mit r.js vorkompilieren, aber für Vorlagen fühlt sich das für mich immer noch falsch an.)
Ich verwende gerne eine Grunzaufgabe (grunt-contrib-jst), um alle HTML-Vorlagen in eine einzige templates.js-Datei zu kompilieren und diese einzuschließen. Sie erhalten die besten IMO ... -Vorlagen aller Welten live in einer Datei, die Kompilierung dieser Vorlagen erfolgt zur Erstellungszeit (nicht zur Laufzeit) und Sie haben beim Start der Seite keine hundert winzigen asynchronen Anforderungen.
Alles unten ist Müll
Ich bevorzuge die Einfachheit, eine JS-Datei in meine Vorlage aufzunehmen. Daher kann ich eine Datei mit dem Namen view_template.js erstellen, die die Vorlage als Variable enthält:
app.templates.view = " \
<h3>something code</h3> \
";
Dann ist es so einfach, die Skriptdatei wie eine normale einzuschließen und sie dann in Ihrer Ansicht zu verwenden:
template: _.template(app.templates.view)
Wenn ich noch einen Schritt weiter gehe , verwende ich tatsächlich Coffeescript, sodass mein Code eher so aussieht und die Escape-Zeichen am Zeilenende vermieden werden:
app.templates.view = '''
<h3>something code</h3>
'''
Durch die Verwendung dieses Ansatzes wird vermieden, dass in require.js gesalzen wird, wo dies wirklich nicht erforderlich ist.
Hier ist eine einfache Lösung:
Die Verwendung von "async: false" ist hier kein schlechter Weg, da Sie auf jeden Fall warten müssen, bis die Vorlage geladen wird.
Also "Rendern" -Funktion
[Ich bearbeite die Antwort, anstatt einen Kommentar zu hinterlassen, weil ich dies für wichtig halte.]
Wenn Vorlagen in der nativen App nicht angezeigt werden und Sie sehen
HIERARCHY_REQUEST_ERROR: DOM Exception 3
, lesen Sie die Antwort von Dave Robinson auf Was genau kann einen "HIERARCHY_REQUEST_ERR: DOM-Ausnahme 3" -Fehler verursachen? .Grundsätzlich müssen Sie hinzufügen
auf die $ .ajax Anfrage.
quelle
dataType: 'html'
unsere Ajax-Anfrage immer ergänzen , nur für den Fall?Mit diesem Mixin können Sie externe Vorlagen mit Underscore auf sehr einfache Weise rendern :
_.templateFromUrl(url, [data], [settings])
. Die Methoden-API ist fast identisch mit der _.template () von Underscore . Caching inklusive.Verwendung:
quelle
Ich wollte require.js nicht für diese einfache Aufgabe verwenden, also habe ich die modifizierte Lösung von koorchik verwendet.
Warum sollten Vorlagen an Dokumente angehängt werden, anstatt sie in einem Javascript-Objekt zu speichern? Da ich in der Produktionsversion eine HTML-Datei mit allen bereits enthaltenen Vorlagen generieren möchte, muss ich keine zusätzlichen Ajax-Anforderungen stellen. Gleichzeitig muss ich in meinem Code kein Refactoring vornehmen, wie ich es verwende
in meinen Backbone-Ansichten.
quelle
async: false
ist jetzt veraltetasync: false
es veraltet ist, habe ich die Antwort durch Hinzufügen einescomplete
Rückrufs verbessert .Dies mag etwas vom Thema abweichen, aber Sie können Grunt (http://gruntjs.com/) verwenden, das auf node.js (http://nodejs.org/, verfügbar für alle wichtigen Plattformen) ausgeführt wird, um Aufgaben von der Website aus auszuführen Befehlszeile. Es gibt eine Reihe von Plugins für dieses Tool, z. B. einen Vorlagen-Compiler, https://npmjs.org/package/grunt-contrib-jst . Siehe Dokumentation zu GitHub unter https://github.com/gruntjs/grunt-contrib-jst . (Sie müssen auch wissen , wie Sie den Node Package Manager https://npmjs.org/ ausführen . Keine Sorge, es ist unglaublich einfach und vielseitig.)
Sie können dann alle Ihre Vorlagen in separaten HTML-Dateien aufbewahren und das Tool ausführen, um sie alle mit Unterstrich vorkompilieren (was meiner Meinung nach eine Abhängigkeit für das JST-Plugin ist, aber keine Sorge, der Node Package Manager installiert Abhängigkeiten automatisch für Sie).
Dadurch werden beispielsweise alle Ihre Vorlagen zu einem Skript zusammengefasst
Beim Laden des Skripts wird ein globaler Wert festgelegt - standardmäßig "JST" - ein Array von Funktionen, auf den wie folgt zugegriffen werden kann:
JST['templates/listView.html']()
das wäre ähnlich wie
Wenn Sie den Inhalt dieses Skript-Tags in (templates /) listView.html einfügen
Der eigentliche Kicker ist jedoch folgender: Grunt wird mit dieser Aufgabe namens 'watch' geliefert, die im Wesentlichen Änderungen an Dateien überwacht, die Sie in Ihrer lokalen grunt.js-Datei definiert haben (die im Grunde eine Konfigurationsdatei für Ihr Grunt-Projekt ist, in Javascript) ). Wenn Sie grunzen, starten Sie diese Aufgabe für Sie, indem Sie Folgendes eingeben:
Über die Befehlszeile überwacht Grunt alle Änderungen, die Sie an den Dateien vornehmen, und führt alle Aufgaben, die Sie in dieser Datei grunt.js eingerichtet haben, automatisch aus, wenn Änderungen festgestellt werden - wie bei der oben beschriebenen jst- Aufgabe. Bearbeiten und speichern Sie Ihre Dateien, und alle Ihre Vorlagen werden in einer js-Datei neu kompiliert, auch wenn sie über mehrere Verzeichnisse und Unterverzeichnisse verteilt sind.
Ähnliche Aufgaben können konfiguriert werden, um Ihr Javascript zu fusseln, Tests auszuführen, Ihre Skriptdateien zu verketten und zu minimieren / zu verkleinern. Und alles kann an die Überwachungsaufgabe gebunden werden, sodass Änderungen an Ihren Dateien automatisch einen neuen "Build" Ihres Projekts auslösen.
Es dauert einige Zeit, um die Dinge einzurichten und zu verstehen, wie die Datei grunt.js konfiguriert wird, aber es lohnt sich die investierte Zeit, und ich glaube nicht, dass Sie jemals wieder zu einer vorgrunzenden Arbeitsweise zurückkehren werden
quelle
template: JST['test.html']()
Es scheint nicht, dass die Daten von JST geladen werden :( (siehe meine Frage hier: stackoverflow.com/questions/29723392/… )Ich denke , das ist das, was Ihnen helfen könnte. Alles in der Lösung dreht sich um die
require.js
Bibliothek, bei der es sich um eine JavaScript-Datei und einen Modullader handelt.Das Tutorial unter dem obigen Link zeigt sehr gut, wie ein Backbone-Projekt organisiert werden kann. Eine Beispielimplementierung wird ebenfalls bereitgestellt. Hoffe das hilft.
quelle
Ich habe mich für Javascript-Vorlagen interessiert und mache jetzt die ersten Schritte mit Backbone. Das habe ich mir ausgedacht und scheint ziemlich gut zu funktionieren.
quelle
get
Funktion würde ich wahrscheinlich das$.ajax
selbst zurückgeben, damit es ein Versprechungsobjekt zurückgibt, falls Ihre Vorlage nicht sofort reagiert.Ich musste den Datentyp auf "Text" setzen, damit er für mich funktioniert:
quelle
Ich habe eine Lösung gefunden, die für mich mit jQuery funktioniert.
Ich füge den Unterstrich-Vorlagencode mit der Methode jQuery.load () zur HTML-Hauptdatei hinzu.
Sobald es dort ist, verwende ich es zum Generieren der Vorlagen. Alle müssen synchron ablaufen!
Das Konzept lautet:
Ich habe einen unterstrichenen Kartenvorlagencode:
Und ich habe diesen Code in eine Datei namens map-template.html eingefügt
Danach erstelle ich einen Wrapper für die Vorlagendateien.
Dann füge ich diese Datei wie folgt in meine HTML-Hauptdatei ein.
Im Kopf:
Prost.
quelle
Ich weiß, dass diese Frage sehr alt ist, aber sie war das erste Ergebnis einer Google-Suche nach Ajax-Vorlagen mit Unterstrich.
Ich war es leid, keine gute Lösung dafür zu finden, also habe ich meine eigene erstellt:
https://github.com/ziad-saab/underscore-async-templates
Zusätzlich zum Laden von Unterstrichvorlagen mit AJAX werden die Funktionen <% include%> hinzugefügt. Ich hoffe, es kann jemandem nützlich sein.
quelle
Es war mir etwas unangenehm, jQuery zu zwingen, synchron zu funktionieren, deshalb habe ich das vorherige synchrone Beispiel mithilfe von Versprechungen geändert. Es ist so ziemlich das Gleiche, läuft aber asynchron. Ich verwende in diesem Beispiel hbs-Vorlagen:
Um dann das gerenderte HTML zu verwenden:
HINWEIS: Wie von anderen erläutert, ist es vorzuziehen, alle Vorlagen in einer einzigen Datei templates.js zu kompilieren und diese am Anfang zu laden, anstatt viele kleine synchrone AJAX-Aufrufe zu haben, um Vorlagen beim Laden der Webseite abzurufen.
quelle
Vorwärtswarnung - Hier sind Drachen:
Ich erwähne den unten gezeigten Ansatz nur, um denjenigen zu helfen, die Schwierigkeiten haben, ASP.NET-Stacks (und ähnliche Frameworks) in Einklang mit dem Ökosystem von js-libs zu bringen. Es versteht sich von selbst, dass dies keine generische Lösung ist. Trotzdem ...
/ endforwardwarning
Wenn Sie ASP.NET verwenden, können Sie Ihre Vorlagen externalisieren, indem Sie sie einfach in einer oder mehreren eigenen Teilansichten platzieren. Aka in Ihrer .cshtml:
In Ihrer template.cshtml:
Und jetzt können Sie die Vorlage wie gewohnt verwenden:
Ich hoffe, dieser schwer fassbare Ansatz hilft jemandem, eine Stunde Kopfkratzen zu sparen.
quelle