¿Agregar lógica dentro de las plantillas JS? ¿Buena idea o no?
-
26-10-2019 - |
Pregunta
¿Es una buena idea tener/agregar lógica dentro de una plantilla de JavaScript como así?
<time style="display: <%= time ? 'block' : 'none' %>"><%= time %></time>
¿Cómo se ve afectado el tiempo de renderizado por esto? ¿Es una gran diferencia?
Solución
En general, es aconsejable evitar la lógica en las plantillas, aunque la salida condicionalmente de un bloque si se inicializa algún valor está bien.
Lo siguiente, no tendría ningún problema con:
<% if(time) { %><time><%= time %></time><% } %>
Para tu situación, haría esto. En tus <head>
(o CSS):
<style>
time:empty { display: none; }
</style>
En tu plantilla:
<time><%= time %></time>
No estoy seguro del soporte del navegador para el pseudo-selector `: vacío ', pero para estar seguro también podría hacer:
$("time:empty").hide();
Otros consejos
En general, la lógica no debe estar en plantillas. La lógica debería estar en modelos y controladores, cuanto más en los modelos y cuanto menos en los controladores, mejor.
Sin embargo, en el ejemplo particular que presentó, lo condicional no es realmente lógica, es más como asegurarse de que la plantilla no se rompa. Entonces, conceptualmente, ese tipo de "lógica" debería estar presente en la vista.
Creo que la documentación de Django en sus plantillas hace un buen trabajo separando (y explica) la lógica que se encuentra en las plantillas y la lógica que realmente no lo hace en las plantillas. https://docs.djangoproject.com/en/dev/ref/templates/builtins/