2012-05-11 9 views
5

Editar: Para que quede claro, no estoy cuestionando la genialidad de jQuery. Lo uso en todas partes. Simplemente no entiendo las ventajas de usar los widgets sobre los objetos js regulares que aprovechan la funcionalidad de jQuery.¿Ventajas de jQuery Widget sobre el objeto JS normal?

Recientemente he tenido que usar algunos jQuery Widgets en una aplicación en la que estoy trabajando, y los encuentro muy poco intuitivos/feos. Parece que hay muchas convenciones para aprender que realmente no agregan ningún valor, y la sintaxis no se ajusta a intellisense o refactorización fácil.

No me malinterpreten, uso jQuery constantemente y odiaría la vida sin eso, solo que no veo el valor en la convención de widgets. Estoy seguro de que me estoy perdiendo el objetivo porque están muy extendidos, así que por favor, dame una pista. ¿Por qué las personas crean widgets jQuery en lugar de objetos js regulares?

excesivamente simplificada Ejemplo:

regular JavaScript Object:

//instantiate & render 
var foo = new MyDomain.MyObject('#mySpecialInput', options) 
foo.render(); 

//assign to property 
foo.value = 5; 
//call method 
foo.multiplyBy(2); 
//bind event 
foo.change(function(){ 
    alert('it changed'); 
} 

Jquery Widget:

//instantiate & render 
var $foo = $('#mySpecialInput'); 
$foo.myWidget(options); 

//assign to property 
$foo.myWidget('option', 'value', 5); 
//call method 
$foo.myWidget('multiplyBy', 2); 
//bind event 
$foo.bind('myWidgetChange', function(){ 
    alert('it changed'); 
} 
+7

una razón será [jQuery es increíble y hace muchas cosas:)] (http://img180.imageshack.us/img180/3305/addanumbertoanothernumb.png) – naveen

+1

@naveen esto está empezando a mirar más como la respuesta real :) –

+1

Uso el jQuery UI Widget Factory (creo que es a lo que te refieres) para escribir complementos todo el tiempo. No creo que alguna vez los use para cada objeto. La fábrica permite llamar a los métodos públicos con bastante facilidad ('$ foo.data ('myWidget'). MultiplyBy (2);'). –

Respuesta

1

Lo más importante es que los widgets jQuery ayudan a traer estructura a su aplicación que sería muy difícil de mantener sin ellos. Por supuesto, también proporcionan bastantes eventos útiles como .bind(), que a veces pueden ser muy útiles. Después de buscar en Google, encontré this article en widgets jQuery, que detalla un poco más sus ventajas.

Personalmente, prefiero estructurar mis scripts (más) manualmente, pero si no tiene ganas de hacerlo, los widgets de jQuery pueden ayudar.


cita relevante que detalla cómo los widgets jQuery añaden estructura:

... que proporciona el nivel de organización de código que es muy difícil de mantener exterior de una estructura de widgets. Cambia el código de siendo imprescindible ("haz esto, luego eso, luego otra cosa, enlaza con haz clic en") a declarativo ("actúa como una cosa expandida"). Esto te libera para definir qué significa "expandir cosa", mientras no abarrota o cambiando la capa externa de tu aplicación. No más de cientos de líneas de longitud $ (document) .ready() bloques.

+1

Este es el argumento que veo que se lanza, pero, ¿cómo aporta el widget jQuery más estructura/facilidad de mantenimiento que un objeto regular de JavaScript? El artículo al que vinculó parece suponer que antes de los widgets, todos habíamos estado usando funciones globales y códigos que no eran de OO. Entiendo la necesidad de estructura, pero ¿por qué la sintaxis inusual? ¿Por qué pasar nombres de propiedad y métodos como cadenas? ¿Por qué reinventar la herencia? ¿Por qué no usar las convenciones de JavaScript? –

+0

Es una larga explicación, así que te recomiendo que leas el artículo para averiguarlo. Veré si puedo encontrar una cita relevante mientras tanto. –

+0

Parece que el artículo al que vinculó hace la suposición de que antes de los widgets, todos habíamos estado usando funciones globales y código no OO. Entiendo la necesidad de estructura, pero ¿por qué la sintaxis inusual? ¿Por qué pasar nombres de propiedad y métodos como cadenas? ¿Por qué reinventar la herencia? ¿Por qué no usar las convenciones de JavaScript? –

0
  1. Organización del código y estructurar
  2. namespacing
  3. Herencia
  4. alcance apropiado y cierres
  5. Cruz-desarrollador de legibilidad y arquitectura común
  6. propiedades predefinidas para el acceso a los elementos comunes
+0

Argumentaría que todos estos son más difíciles/poco intuitivos usando widgets jQuery que los objetos JS normales. ¿Tal vez puedes darme un ejemplo o dos? –

+0

Tengo la sensación de que estás buscando a alguien para confirmar tu respuesta en lugar de obtener una respuesta honesta, pero estoy divagando.1 y 5) Si tiene un objeto jquery enrollado en su casa, está implícita una cierta estructura, que es personalizada para su aplicación, pero que otros no pueden usar fácilmente. 3) JS es un lenguaje de scripting, no estrictamente OO. Como tal, no hay herencia real. 4) He tenido instancias en las que escribo una función pensando que es buena para un objeto dom jquery, pero se dirige a la incorrecta. 6) Puede almacenar el objeto en un contenedor de datos personalizado, pero de forma predeterminada los widgets almacenan en los datos. –

+0

Ah, y es más fácil mantener las convenciones de jQuery con un widget, en lugar de tener dos convenciones diferentes para invocar el código. Si realmente te molesta tanto, sugiero buscar en Dojo, que tiene la sintaxis que te gusta (aunque me parece una bestia para trabajar). –

1

Para añadir a Pensando punto Sitios, Usando widget de jQuery también ofrece otras OO características iguales (sin inversiones en la construcción de la infraestructura necesaria para apoyarla en js lisos)

- extensibilidad
- en lugar de herencia - permite que se extiende desde sí . Esto permite un código modular y altamente mantenible
- concepto de métodos públicos y privados para mejorar la legibilidad del código, y la mejor parte es que mantiene el encadenamiento ya que devuelve el objeto jQuery
- Tiene muchos métodos predefinidos para administrar los widgets ciclo de vida: creación, inicialización y destrucción

jQuery widget framework se puede tratar como una herramienta para imitar la funcionalidad OO like.

Proporciona una base flexible para construir complementos completos y completos con una API consistente. Está diseñado no solo para complementos que son como parte de jQuery UI, sino para el consumo general por parte de desarrolladores que desean para crear componentes orientados a objetos sin reinventar la infraestructura común. - http://wiki.jqueryui.com/w/page/12138135/Widget%20factory

+1

I Aprecio la respuesta bien pensada, pero casi un año después de haber formulado esta pregunta, siento aún más fuerte sobre la complejidad de la sintaxis de los widgets que antes. Usar cadenas mágicas en todas partes es simplemente malo. Hay muchos otros frameworks OO. allá afuera ahora, no hay razón para usar uno con una sintaxis extraña que no permite intel lisense –

+1

Sí, a su punto, los widgets tienen una sintaxis extraña para cosas simples como llamar a un método público en una instancia: '$ (# selector) .widgetName(). WidgetName (" publicMethodName ");' – airboss