Continuando con mi comentario sobre la pregunta, jQuery es una herramienta potencial para el trabajo, ya que proporciona algunas de las bases para lo que buscas. Sin embargo, una vez dicho esto, introduce complejidades propias, y además, no todas las "formas jQuery" son iguales. Sugeriré una forma de usar jQuery como su "modelo de objeto", pero puede o no satisfacer sus necesidades.
Lo primero es lo primero. La filosofía de jQuery es comenzar todo seleccionando primero el elemento, usando $()
, o equivalentemente jQuery()
. Todas las operaciones comienzan conceptualmente con esto. Esta es una forma ligeramente diferente de pensar en comparación con la creación de un objeto que envuelve un elemento y mantiene una referencia a ese envoltorio, pero esencialmente esto es lo que jQuery hace por usted. Una llamada al $('#some-id')
toma el elemento con id de "some-id" y lo envuelve en un objeto jQuery.
una manera: plugins Escribir "Filtro".
Reemplace su constructor con un método initFilter()
jQuery. Puede hacerlo modificando el prototipo jQuery y utilizando el objeto jQuery como su envoltorio. El prototipo de jQuery es referenciado por jQuery.fn
, por lo que:
jQuery.fn.initFilter = function (prop, callback) {
// Save prop and callback
this.data('filter-prop', prop);
this.data('filter-callback', callback);
// Bind events (makes sense to do this during init)
this.click(function() {
$(this).updateFeed();
});
};
luego hacer una cosa similar para updateFeed()
:
jQuery.fn.updateFeed = function() {
this.data('filter-prop');
this.data('filter-callback')();
});
y utilizarlo como esto:
$('#filter').initFilter(prop, callback);
Tenga en cuenta que updateFeed
puede ser simplemente alineado con el controlador de clics para evitar la contaminación innecesaria del espacio de nombres de jQuery. Sin embargo, una ventaja de usar jQuery de este modo es que no necesita mantener una referencia al objeto si necesita invocar alguna función más adelante, ya que jQuery relaciona todas las referencias con elementos reales. Si desea llamar updateFeed
mediante programación, entonces:
$('#filter').updateFeed();
continuación, se invocará en el objeto correcto.
Algunas cosas a considerar
sin duda hay desventajas de este método. Una es que todas las propiedades, que hemos guardado contra el elemento usando .data()
, se comparten entre todas las funciones de jQuery que actúan sobre ese elemento. Intenté aliviar esto prefijando los nombres de propiedad con "filter-", pero dependiendo de la complejidad de su (s) objeto (s), esto puede no ser adecuado.
Además, este método exacto puede no ser tan adecuado para objetos que requieren mucha manipulación (es decir, objetos con muchas funciones) ya que todas estas funciones se vuelven comunes a todos los objetos jQuery. Hay formas de encapsular todo esto, lo cual no entraré aquí, pero jQuery-ui hace esto con sus widgets, y estoy experimentando con otra alternativa más en una biblioteca que estoy creando.
Sin embargo, retrocediendo un poco, la única razón por la que sugerí usar jQuery en primer lugar es que su objeto Filter parece estar fuertemente relacionado con el DOM. Vincula eventos al DOM, modifica el DOM en función de la interacción del usuario, básicamente parece vivir en el DOM, por lo tanto, utilice algo basado en DOM, es decir, jQuery.
No quiero sonar como un fan sin sentido de jQuery, pero * parece * que sería mejor usar jQuery o un marco similar. Si bien su objetivo principal es ayudarlo con la selección y manipulación de DOM, toda la biblioteca se basa en este patrón de envolvente de DOM del que está hablando, por lo que sus capacidades de complemento y otras funciones auxiliares naturalmente le facilitan la tarea. bien. –
Todavía necesito usar constructores ya que habrá múltiples filtros en un documento. ¿Puedes mostrarme un ejemplo usando jQuery con el objeto Filter? –
En breve publicaré una respuesta. Además, la próxima vez recuerde incluir @ Box9 en su comentario para recibir la notificación. Solo casualmente tropecé con esta pregunta. –