2009-08-09 10 views
29

Estoy trabajando en un sitio y estoy usando JQuery esencialmente la primera vez. En su mayoría he usado MooTools para proyectos anteriores, y tengo algunas clases de widgets que he escrito usando la estructura MooTools Class. Me gustaría transferirlos a JQuery, pero me parece que no hay nada similar a la funcionalidad de MooTools cuando se trata de clases de objetos.OO JQuery y clases

He buscado un poco, y no he encontrado mucho en él. Digg parece tener rolled their own, pero no estoy seguro de si esto es algo que debería estar usando. ¿Hay una mejor manera? ¿Qué tan orientadas a objetos reciben normalmente las personas con JQuery? ¿Cuál es el método habitual para encapsular un widget UI (o cualquier estructura de clase funcional)?

Voy a publicar un ejemplo de una posible falsa clase Widget MooTools:

var ZombatWidget = new Class({ 
    Extends: BaseWidget, 
    widgetPropertyX = 'prop1', 
    widgetPropertyY = 'prop2', 
    attach = function(el) { 
     var f = function() { 
      //do something widgety 
     }; 
     el.addEvent('dblclick',f); 
     el.addClass('widgetized'); 
    } 
}); 

var z = new ZombatWidget(); 
z.attach($('widgetDiv')); 

Lo que tengo es mucho más grande que eso, pero usted consigue la idea. ¿Debo convertir esto al método prototype de estructuración de clase/herencia? ¿Cómo escribirías este tipo de clase de objetos usando JQuery?

Respuesta

0

La pregunta es ... ¿Por qué te estás alejando de MooTools si se adapta a tus necesidades? Me parece que MooTools estaba funcionando bien, y no hay nada que JQuery haga que MooTools no pueda hacer. (Lo opuesto no es verdad).

Desafortunadamente, jQuery no está diseñado para admitir OOP clásico como MooTools, por lo que tendrá que escribir sus clases como complementos de jQuery.

+0

Erm ... no, esa no es la pregunta. Sin embargo, como ya lo había preguntado, JQuery era parte de las especificaciones del proyecto, que no fui escrito por mí. Me gustaría traer mis clases de MooTools si se pueden convertir, para evitar que tenga que volver a escribirlas para JQuery. – zombat

+0

** @ zombat: ** jQuery no tiene instalaciones para clases, tendrá que volver a escribirlas en jQuery. –

0

Los complementos a veces son el truco.

Por supuesto, puede usar solo lo suficiente de mootools para obtener su clase/modelo de herencia. Con la implementación de document.id "modo de compatibilidad" en 1.2.3 puede tener su pastel y comérselo también (creo que no lo he hecho yo mismo)

4

Hm ... interesante. Tenemos jQuery que es una gran herramienta para interactuar con el DOM. Es una herramienta de selección donde puedes escribir tu propio código (complementos) para modificar los elementos seleccionados. Puede interactuar aquí con su propio código (orientado a objetos) en un complemento para hacer algo realmente genial.

¿Por qué necesitaría capacidades OO adicionales en jQuery a menos que desee heredar de otros complementos de jQuery?

Debido a que es posible que tenga un plugin que le permite hacer lo siguiente:

$(".spiffyness").yourSpiffyficationPlugin1(); 

Y, mientras hace algo de genialidad muy fresco ya, se necesita más spiffyness en la parte superior de esta.

Por lo tanto desea heredar de su primer plugin que se traduce en:

$(".spiffyness").yourSpiffyficationPlugin2(); //plugin inherited from 1 

Pero ... ¿no llegar demasiado al hacer esto:

$(".spiffyness").yourSpiffyficationPlugin1().yourSpiffyficationPlugin2(); 

Cuando el segundo plug-in simplemente hace esta pequeña (pero increíble;)) cosa extra encima de la primera?

En otras palabras: es lo que quieres, ¿vale la pena el esfuerzo por el bien del purismo OO? ¿O es el mecanismo de tubería jQuery lo suficientemente bueno y tal vez todo lo que necesita?

Yo diría que la separación de responsabilidades y/o su mentalidad mootools podría ser el verdadero problema aquí. Deje que jQuery haga lo que es bueno, use su potente mecanismo de cañería, canalice sus propios complementos (que pueden contener toneladas de OO) ... y podrá obtener excelentes resultados mientras su código esté limpio.

Si crees que estoy pensando demasiado simple aquí, un buen ejemplo de la esencia de tu punto sería bienvenido! :-)

Y para estar por delante, si estás haciendo algo realmente avanzado y no te salgas con la tuya simplemente haciendo algo encima de otra cosa, tu complemento también podría delegar en una de tus clases de OO . P.ej. como:

$.fn.totalAwesomeness = function(options) { 
    var defaults = { 
    mode: 1, 
    title: 'Awesome' 
    }; 
    var opts = $.extend(defaults, options); 
    return this.each(function() { 
    var $this = $(this); 
    var handler = null; 
    if(defaults.mode == 1) 
     handler = new com.myStuff.class1($this); 
    else if(defaults.mode == 2) 
    handler = new com.myStuff.class2($this); //class2 inherits from class1 
    handler.doMagic(); 
    }); 
}; 
+1

Las clases de Mootools ayudan a mantener el código simple y estructurado. Como usuario que no pertenece a JQuery, no puedo entender los complementos de JQuery con solo echar un rápido vistazo. Las clases de complementos de Mootools generalmente son mucho más legibles incluso con una experiencia de js muy baja. – jpeltoniemi

2

Siempre se puede usar también moo4q - http://moo4q.com/. Agrega soporte de clase MooTools a jQuery.

+3

Vale la pena mencionar que este enfoque requiere que ejecutes MooTools además de jQuery. Puedes hacer una compilación personalizada para capturar el objeto 'Clase' de MooTools, pero requiere incorporar muchas otras cosas en las que también se extiende MooTools. Puede que no sea ideal para todos. – restlessdesign

2

Hay terceros javascript implementaciones de clase que proporcionan muy potentes capabilites de introspección. Me gustaría destacar particularmente JS.Class y Joose. Mientras JS.Class se modela después de Ruby, Joose se modela después de Moose. No soy usuario de mootools, así que no puedo comentar sobre sus ventajas/desventajas con respecto a mootools. Pero resumiría sus características principales.

JS.Class tiene un fuerte enfoque en la simulación de las características orientadas a objetos de Ruby y hace un muy buen trabajo en eso. Proporciona una poderosa biblioteca modelada según la biblioteca estándar de Ruby y también viene con un marco de administración y prueba de paquetes bien integrado.

Joose, si bien no ofrece instalaciones de gestión de paquetes/marcos de prueba, se destaca en términos de instalaciones avanzadas de administración de atributos, filtros y mejores instalaciones de introspección.

Ambos tienen una documentación muy buena y se pueden utilizar tanto en el navegador como en el servidor.

2

Acabo de terminar un primer lanzamiento de mi mini proyecto: https://github.com/op1ekun/plOOgins. Se trata de escribir código OOP para ser utilizado como complementos de Jquery. No es ciencia de cohetes simplemente algo que queríamos usar en mi lugar de trabajo. Tal vez te ayude un poco. ¡Buena suerte!

Cuestiones relacionadas