templates - charset - tipos de codificaciones
¿Cómo hacer que Jade detenga los atributos del elemento de codificación HTML y produzca un valor de cadena literal? (4)
Al escribir estas líneas, no creo que haya una manera de hacerlo. Vea este problema: https://github.com/visionmedia/jade/issues/198
Terminé cayendo en HTML sin procesar para resolverlo, usando | prefijo.
ACTUALIZACIÓN Jade v0.24.0 corrige esto con una sintaxis !=
Para los atributos. option(value!=''<%= id %>'')
Estoy intentando construir una <option>
con jade, donde el valor de la opción es un marcador de plantilla UnderscoreJS: <%= id %>
pero no puedo hacer que funcione porque jade está convirtiendo mi marcador en <= id >
.
Aquí está mi marcado de Jade:
script(id="my-template", type="text/template")
select(id="type")
<% _.each(deviceTypes, function(type){ %>
option(value=''<%= type.id %>'') <%= type.name %>
<% }) %>
Espero que produzca este html:
<script id="my-template" type="text/template">
<select id=''type''>
<% _.each(deviceTypes, function(type){ %>
<option value="<%= type.id %>"> <%= type.name %> </option>
<% }) %>
</select>
</script>
Pero lo que obtengo en cambio, es esto:
<script id="my-template" type="text/template">
<select id=''type''>
<% _.each(deviceTypes, function(type){ %>
<option value="<%= type.id %>"> <%= type.name %> </option>
<% }) %>
</select>
</script>
Tenga en cuenta la diferencia muy sutil en la línea de <option>
de la salida ... el atributo de value
de la opción ha sido codificado en HTML.
¿Cómo evito que Jade HTML codifique este valor? Necesito que produzca el valor literal, de la misma manera que lo hace con el texto de la opción.
Así que estaba teniendo un problema similar a este, en el que quería crear una plantilla Underscore dentro de una de mis vistas de Jade. Una parte de la plantilla de Subrayado necesaria para establecer el atributo selected
en una etiqueta <option>
.
Inicialmente intenté hacer que Underscore devuelva "seleccionado" o "". Desafortunadamente, Jade no tiene una manera de mostrar un atributo sin valor y no tiene una forma de nombres de atributos que no escapen (los bits del subrayado volvieron sin comillas).
Afortunadamente, puede deshacer el valor de un atributo, preservando las comillas.
En este ejemplo, estoy seleccionando un valor de un menú desplegable basado en el tipo de propietario que coincide con un valor de cadena. Establecí una función de ayudante para no tener que escabullirme manualmente.
- var checkType = function(type) { return "<%= contact.type == ''" + type + "'' %>" };
.clearfix
label Title:
.input
select(type="text", name="contact[title]", class="new-title")
option(value="") Choose Title
option(value="manager", selected="#{ checkType(''manager'') }") Manager
option(value="member", selected="#{ checkType(''member'') }") Member
option(value="owner", selected="#{ checkType(''owner'') }") Owner
option(value="president", selected="#{ checkType(''president'') }") President
option(value="individual", selected="#{ checkType(''individual'') }") Individual
option(value="main_contact", selected="#{ checkType(''main_contact'') }") Main Contact
Según algunos, debería poder usar !{}
Aquí para evitar completamente todas las codificaciones ( <, >, etc.
), sin embargo, esto no funcionó en mi versión de Jade. Estoy usando "^0.30"
y la versión actual es 1.x
¡Si alguien puede verificar que !{}
Funciona en esta situación usando la última versión de Jade, actualizaré mi respuesta.
Derick ya ha mencionado que Jade agregó una nueva característica para la codificación HTML de unescape en la actualización, pero me gustaría agregar un apéndice para alguien que quizás no lo reconozca.
- var html = "<script></script>"
| !{html} <-- Escaped
| #{html} <-- Encoded
Esta característica se ha agregado a Jade . Simplemente use el operador !=
Si desea deshacer los valores de los atributos:
script#my-template(type=''text/template'')
a(href!=''<%= url =>'') Clicky clicky...