2010-03-10 8 views
5

¿Cuál es la mejor manera de crear variables estáticas para los complementos jQuery?Variables estáticas a jQuery Complementos; ¿como crear?

Tengo 2 ejemplos de casos de uso para ilustrar mi pensamiento hasta el momento; cada uno con algunas ideas.
Cualquier otra idea bienvenida por supuesto ...

Un ejemplo es para una variable estática que contiene: configuración de la animación, la configuración de diseño, detalles del producto, etc; el otro para datos de almacenamiento en caché de variables estáticas.

Espero que 'estática' es la terminología correcta aquí ... single globals. Por favor, corrige si está mal.

Caso 1: para ajustes de

// defining globally 
var anObject = { 
value1 = 0; 
value2 = 0; 
} 

jQuery.anObjectSet(partialObject) { 
anObject = jQuery.extend(anObject, partialObject); 
} 

jQuery.fn.myPlugin = function (partialObject) { 
obj = jQuery.extend(anObject, partialObject); 
} 

o tal vez?

// adding to the jQuery object 
jQuery.anObject = { 
value1 = 0; 
value2 = 0; 
} 

jQuery.anObjectSet(partialObject) { 
jQuery.anObject = jQuery.extend(jQuery.anObject, partialObject); 
} 

jQuery.fn.myPlugin = function (partialObject) { 
obj = jQuery.extend(jQuery.anObject, partialObject); 
} 

o tal vez?

jQuery.anObjectSet(partialObject) { 
if(!jQuery.anObject) 
    jQuery.anObject = { 
    value1 = 0; 
    value2 = 0; 
    } 

jQuery.anObject = jQuery.extend(jQuery.anObject, partialObject); 
} 

jQuery.fn.myPlugin = function (partialObject) { 
if(!jQuery.anObject) 
    jQuery.anObject = { 
    value1 = 0; 
    value2 = 0; 
    } 
obj = jQuery.extend(jQuery.anObject, partialObject); 
} 

Caso 2: para el almacenamiento en caché

jQuery.fn.myPlugin = function (newObject) { 
if(!cache[newObject]) 
    cache[newObject] = $(newObject); 

return cache[newObject]; 
} 

o tal vez? (He visto este método en otro lugar)

window.$cache = {}; 

jQuery.fn.myPlugin = function (newObject) { 
if(!$cache[newObject]) 
    $cache[newObject] = $(newObject); 

return $cache[newObject]; 
} 

Gracias. Quiero construir una biblioteca .js, comenzando en el camino correcto ...

Respuesta

11

Si está buscando hacer una variable "global" o estática solo para su biblioteca y su biblioteca, un cierre es el camino a ir.

Un global normal es algo malo porque contamina el espacio de nombres y no tienes idea de quién va a ejecutar tu biblioteca.

Al definir la variable estática dentro de una función anónima, nos damos acceso a una variable que nadie puede tocar y es efectivamente "global" para el propósito de nuestras funciones. Si entiendo correctamente lo que estás tratando de hacer, esto debería lograrlo.

(function($){ 
    var $cache = {}; 

    jQuery.fn.myPlugin = function (newObject) { 
     if(!$cache[newObject]) 
     $cache[newObject] = $(newObject); 

     return $cache[newObject]; 
    } 

})(jQuery); 

Editar:

La variable $cache sólo será accesible a las funciones definidas dentro de esta función anónima. Entonces, si las otras funciones necesitan acceder a este archivo, también deben definirse dentro de esta función anónima.

La única alternativa a la definición de todo aquí (que yo sepa) es tener una combinación de funciones de acceso, una simple función definida dentro de este cierre, cuyo propósito es proporcionar funciones fuera de acceso a la $cache.

Preferiblemente, me gustaría definir las funciones necesarias dentro de este cierre. Sin embargo, en última instancia, se trata de un detalle de implementación y depende de usted.

+1

ps, ​​hay una sección de "Desarrollo de complementos" @ http: //docs.jquery.com/Tutoriales, si quieres leer más :-) – Seaux

+0

esto es genial ~ una pregunta: creo otro complemento utilizando esta técnica en otro lugar. Está envuelto en una función anónima como se recomienda arriba. ¿tendrá acceso a $ caché? o ¿la función del complemento debe estar contenida dentro de la misma función anónima? lejos para probar ... – Ross

+0

@Danny gracias por la edición. brillante. +1 nuevamente si solo es posible. – Ross

Cuestiones relacionadas