493 Stimmen

Erläuterung von <script type = "text/template"> ... </script>

Ich bin gerade über etwas gestolpert, das ich noch nie gesehen habe. Im Quelltext der TODO-Beispielanwendung von Backbone.js ( Backbone TODO Beispiel ) hatten sie ihre Vorlagen innerhalb einer <script type = "text/template"></script> der Code enthält, der wie ein PHP-Code aussieht, aber JavaScript-Tags enthält.

Kann mir das jemand erklären? Ist das legal?

0 Stimmen

Gute Frage und Antwort. Ich bin gerade auf diesen Trick im neuen YUI App Framework Code gestoßen: new.yuilibrary.com/yui/docs/app/app-todo.html

4 Stimmen

Was ist mit type="text/tcl" die ich sah in dem W3C-Dokument ? Wie kann man es verwenden? (Soll ich eine andere Frage stellen?)

3 Stimmen

@L01man ja, Sie sollten eine andere Frage stellen.

443voto

David Tang Punkte 89390

Diese Skript-Tags sind eine gängige Methode zur Implementierung von Template-Funktionen (wie in PHP), aber auf der Client-Seite.

Wenn Sie den Typ auf "text/template" setzen, handelt es sich nicht um ein Skript, das der Browser verstehen kann, so dass der Browser es einfach ignoriert. So können Sie dort alles Mögliche einfügen, was dann später extrahiert und von einer Vorlagenbibliothek zur Erzeugung von HTML-Schnipseln verwendet werden kann.

Backbone zwingt Sie nicht dazu, eine bestimmte Template-Bibliothek zu verwenden - es gibt eine ganze Reihe davon: Schnurrbart , Haml , Öko , Google Closure-Vorlage usw. (in dem von Ihnen verlinkten Beispiel wird die Option unterstrich.js ). Diese verwenden eine eigene Syntax, die Sie innerhalb dieser Skript-Tags schreiben können.

22 Stimmen

@Matt, genau das. Gleichzeitig ist es einfach, den vollständigen Text wieder abzurufen mit .innerHTML Daher ist es jetzt gängige Praxis unter Templating-Engines.

1 Stimmen

Das sind doch fantastische Neuigkeiten! Ich habe nach einer Lösung wie dieser gesucht. Vielen Dank für Ihre Antwort und Ihr Follow-up!

7 Stimmen

Hallo, hier ist ein anderer Matt. Würde <script type="text/template"> einen html-Verifizierungstest bestehen?

124voto

Rimian Punkte 34365

Das ist legitim und sehr praktisch!

Versuchen Sie dies:

<script id="hello" type="text/template">
  Hello world
</script>
<script>
  alert($('#hello').html());
</script>

Mehrere Javascript-Templating-Bibliotheken verwenden diese Technik. Handlebars.js ist ein gutes Beispiel.

5 Stimmen

Wie würden Sie diese Warnung in rohem Javascript mit Jquery tun?

3 Stimmen

@tremor Meinen Sie in rohem Javascript ohne jquery? So etwas wie: var el = document.getElementById('hallo'); var html = el.textContent; alert(html); (Sie müssen sich näher mit der Verarbeitung des Textes von Skript-Tags im IE befassen)

0 Stimmen

@SgtPooki ja ich meinte ohne, danke für die Antwort. Was ich wirklich tun möchte, ist src, dass Skript zu einer externen Datei und erhalten Sie es, aber ich habe gefunden, dass ist nicht wirklich möglich so ich bin Tauchen in AJAX und socket.io jetzt.

30voto

Fizer Khan Punkte 79079

Durch Setzen des Skript-Tags type andere als text/javascript wird der Browser den internen Code des Skript-Tags nicht ausführen. Dies wird als Mikrovorlage bezeichnet. Dieses Konzept ist weit verbreitet in Single Page Application (aka SPA) verwendet.

<script type="text/template">I am a Micro template. 
  I am going to make your web page faster.</script>

Bei der Mikrovorlage ist der Typ des Skript-Tags text/template . Es ist sehr gut von Jquery Schöpfer John Resig erklärt http://ejohn.org/blog/javascript-micro-templating/

0 Stimmen

Sie haben eine großartige Ressource aufgenommen. Dieser Link hat mir eine Menge beigebracht.

16voto

Reza Salarmehr Punkte 428

<script type = “text/template”> … </script> ist obsolet. Verwenden Sie <template> Tag stattdessen.

10 Stimmen

<template> Tag wird vom Internet Explorer (IE 11) noch immer nicht unterstützt.

93 Stimmen

In 5 Jahren werden Sie den <template>-Tag verwenden.

15 Stimmen

<script type = "text/template"> können alles Mögliche enthalten, sie werden nicht geparst. Andererseits werden <template>-Tags in ein DOM geparst, müssen also gültiges HTML sein. Normalerweise bedeutet dies, dass das erste als intakte Vorlage erhalten bleibt, während das zweite nicht HTML-konforme Teile entfernt und die Vorlage zerbricht. ...natürlich ist das nur ein Problem, wenn Sie Template-Engines wie Mustache oder ähnliches verwenden.

14voto

Andrew De Andrade Punkte 3536

Um die Antwort von Box9 zu ergänzen:

Backbone.js ist abhängig von underscore.js, das seinerseits John Resigs ursprüngliche Microtemplates implementiert.

Wenn Sie sich für die Verwendung von Backbone.js mit Rails entscheiden, sollten Sie sich unbedingt das Jammit-Gem ansehen. Es bietet eine sehr saubere Möglichkeit zur Verwaltung von Asset-Paketen für Vorlagen. http://documentcloud.github.com/jammit/#jst

Standardmäßig verwendet Jammit auch die Microtemplates von JResig, aber es erlaubt Ihnen auch, die Template-Engine zu ersetzen.

0 Stimmen

Hinzu kommt, dass DocumentCloud, der Anbieter von Jammit, das gleiche Unternehmen ist, das Backbone und Underscore entwickelt hat.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X