espacio de nombres jQuery.data()
Frecuentes
Visto 1,364 veces
8
¿Cómo puedo evitar conflictos con otros complementos de jQuery usando $.data()
?
Estaba pensando que podría usar una sola clave para almacenar mis datos como
$(el).data('myplugin', { foo: 'a', xyz: 34});
y acceder a él como $(el).data('myplugin').foo
etc.
Pero, ¿cómo se puede cambiar fácilmente un valor sin anular todos los datos? Como cambiar el valor de "foo".
3 Respuestas
8
Por qué no usar
$(el).data('myplugin.foo')
y
$(el).data('myplugin.xyz')
?
Por lo tanto, si no necesita acceder a más de un valor al mismo tiempo, evitará pruebas e indirectas inútiles.
contestado el 03 de mayo de 12 a las 19:05
7
Simplemente cambie la propiedad que desea cambiar.
var el = $("<div />");
el.data("myPlugin",{ foo: "foo" });
console.log(el.data("myPlugin").foo); // foo
el.data("myPlugin").foo = "bar";
console.log(el.data("myPlugin").foo); // bar
En cuanto a los conflictos de espacio de nombres, una solución es generar una marca de tiempo en tiempo de ejecución (cuando se define el complemento) y usar esa marca de tiempo en su espacio de nombres. Todavía no está 100% protegido contra conflictos en los navegadores más rápidos, pero se acerca bastante.
contestado el 03 de mayo de 12 a las 19:05
esto funciona porque el objeto es una referencia, debería haberlo pensado antes :( Estaba evitando este enfoque solo porque pensé que tendría que hacerlo, var data = el.data("myPlugin"); data.foo = "bar"; el.data("myPlugin",data);
+1 Kevin. - Jashwant
3
Yo personalmente uso una convención de nomenclatura separada por guiones que antepone nombres de clase, ID, propiedades de datos, etc. con un identificador abreviado de la entidad propietaria del código y uno para el área de funcionalidad.
Si estuviera trabajando en un programa de gráficos para la empresa Foo, mi prefijo podría ser:
foo-chart-
Esto me permite hacer que todos los identificadores de la empresa sean únicos para la empresa y que las áreas de código sean únicas entre sí (para evitar colisiones con otros desarrolladores en otras áreas de funcionalidad).
Ejemplo elaborado:
<button id="foo-chart-refresh" class="foo-chart-interact" data-foo-chart-last="201205031421">Refresh Chart</button>
<script type="text/javascript">
var lastRefresh = $('#foo-chart-refresh').data('fooChartLast'); // see docs on .data() for case/hyphenation handling
</script>
Encuentro que usar un guión encaja bien con casi cualquier lugar en el que se necesiten mis identificadores, ya sea como un valor de atributo de marcado or nombre, o en código, etc. Puede usar cualquier carácter que se ajuste a sus necesidades (.
Es muy común)
contestado el 03 de mayo de 12 a las 19:05
Mi tres. Es particularmente evidente en los módulos javascript de arranque. data-slide
data-slide-to
. El espacio de nombres también aparece en los eventos pero con puntos. slid.bs.carousel
. - Phil Cooper
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas javascript jquery html or haz tu propia pregunta.
La .key debe estar fuera de ()s - m90
@m90: está sugiriendo nombrar literalmente la clave
"myplugin.foo"
. - Cohete Hazmat@Rocket ni siquiera pensó en tener un variable. ¿Sabes si esta sería una sintaxis válida? - m90
@ m90 Simplemente no puedes usarlo directamente. Tiene que ser referenciado usando notación de matriz como lo que está en la respuesta de dystroy o
$(el).data()['myplugin.foo']
.$(el).data().myplugin.foo
arrojaría un error debido amyplugin
no está definido en el objeto de datos. - Kevin B¡Gracias! ¿Sabes cómo puedo eliminar solo mis datos cuando llamo a $.removeData() ? - Alex