Duda sobre envío de datos a plantillas JS

RaymaN

Hola, me ha surgido una pequeña duda sobre el envío de datos a plantillas JS. Actualmente tengo este código:

<ul>
  <li>
    <h2>Pepe, 20 años</h2>
    <button data-id="1" data-name="Pepe" data-age="20">Ver</button>
  </li>
  <li>
    <h2>Paco, 23 años</h2>
    <button data-id="2" data-name="Paco" data-age="23">Ver</button>
  </li>
  ...
</ul>

Al pulsar el button cargo un popup con twig.js sin pasar por el servidor, usando solo los atributos data, para realizar una nueva acción. Mi duda es, ¿está bien este método o es mejor definir un array en JS con los nombres y edades y usar el data-id para rescatar los demás atributos? Sería algo así:

<ul>
  <li>
    <h2>Pepe, 20 años</h2>
    <button data-id="1">Ver</button>
  </li>
  <li>
    <h2>Paco, 23 años</h2>
    <button data-id="2">Ver</button>
  </li>
  ...
</ul>
<script type="text/javascript">
  var data = {
    1: {name: "Pepe", age: 20},
    2: {name: "Paco", age: 23}
  };
</script>
smintcs

Para mi es mejor la primera opción, tienes los datos en un único sitio. Aún así, tampoco hay mucha diferencia.

Si los datos los pones a mano lo puedes tener un poco más separado pero si lo generas desde php es mucho más cómodo la primera opción, generar datos en php y meterlos en un javascript siempre es mas follón que meterlos en el html.

1 respuesta
zoeshadow

Solo por añadirla respuesta de #2, si vas a generar el HTML desde el server, la mejor opción es la 1, solo si fueras a generar el HTML via Javascript tendría sentido tener la información fuera como pones en el ejemplo 2.

eXtreM3

Todo en los atributos data sin duda!

RaymaN

Pues al final he optado por la opción 2, porque en algunos casos hay bastantes atributos y queda un poco feo tanto data-*. Además, me parece más flexible para realizar acciones luego sobre ellos, pues no tendría que llamar al $('button#id').data() sino directamente al objeto del array.

El html se genera desde el servidor, pero luego hay muchas acciones que se realizan en js.

1 respuesta
eXtreM3

#5 diría que sigue siendo más eficiente la opción 1, no? En ambas opciones tienes que cargar todos los parámetros (tanto para añadir los data o para generar el array js). Después sin embargo a la hora de llamarlos es más eficiente invocar por ID (con jquery, como has puesto) que realizar una búsqueda en todo el array.

Edit: coño, no sabía que los data podían almacenar json!

http://jsfiddle.net/nick_craver/5B6RM/

1 respuesta
RaymaN

#6 la eficiencia no es relevante pues no hay operaciones chungas, solo obtener los datos del botón para luego hacer algo con ellos, pero aún así he preparado un test rápido y la opción 2 es algo más rápida xD

http://jsperf.com/data-attr-vs-object

1 respuesta
Gantorys

La 2, y ya que estás puedes generar el html desde twig.js no? (no lo he usado nunca pero me imagino que tendrá un foreach o algo)

eXtreM3

#7 supongo que con una cantidad grande de datos ese método no puede ser viable. Pero aún así gracias por compartir la comparativa!

pd: me encanta meterme en comuniazo y hacer clics rápidos y ver lo rápido que carga jajaja.

Usuarios habituales

  • eXtreM3
  • Gantorys
  • RaymaN
  • zoeshadow
  • smintcs