Su oración de apertura fue en realidad una muy buena declaración de las diferencias entre Backbone.js y jQuery, así que analicemos un poco.
Por un lado, las dos bibliotecas no compiten en absoluto: son complementarias.
Como ejemplo, aquí hay algunas cosas que haría con jQuery:
- Presentaciones de diapositivas animadas
- Mejoras en el control de formularios, como una "ruleta" de números al estilo de iOS
- Alternar la visibilidad de los elementos según el nombre de una clase
Y algunas cosas que podría hacer en Backbone.js:
- Cree un álbum de fotos, donde el usuario haga clic en una miniatura y pueda ver una versión más grande de la foto, junto con algunos datos como la cámara que se utilizó, la ubicación y el nombre del fotógrafo.
- Cree un tipo de página maestra / de detalles que presente una cuadrícula de datos y le permita al usuario hacer clic en elementos individuales y actualizarlos en un formulario.
jQuery sobresale en el nivel micro: selecciona elementos de la página, suavizando las diferencias en la forma en que los navegadores manejan los eventos.
Backbone.js es más amplio. Le ayuda a administrar los datos y la lógica de la aplicación. En el ejemplo de álbum de fotos anterior, Backbone proporciona varias estructuras útiles: tendría algo que contenga todos los datos relacionados con las fotos (un modelo), una lista de todas las fotos del álbum (una colección) y un lugar para colocar lógica que determina lo que sucede cuando un usuario hace clic en una miniatura (la vista). Esas son las piezas principales de un control o aplicación Backbone.
Sin embargo, Backbone.js se beneficia de jQuery, o algo parecido, para ayudar a representar los resultados de los datos y la lógica de su aplicación en el DOM. Es común, por ejemplo, usar jQuery para seleccionar el elemento en la página que servirá como contenedor para su aplicación Backbone. También es común usar jQuery $(function () {});
para activar las piezas de su control Backbone. Probablemente también muestre mensajes de error de validación de campos de formulario con jQuery.
Sin duda, puede crear interfaces de usuario grandes y complejas en jQuery. Tenemos algunos en la aplicación que mantengo en el trabajo. Pero es difícil trabajar con ellos porque jQuery no está diseñado para proporcionar estructura a una aplicación. En particular, la API de jQuery, que se basa en seleccionar grupos de elementos y luego pasar funciones de devolución de llamada que manipulan esos elementos, no es un buen patrón para usar en una aplicación o control grande y complejo. Terminas con muchas funciones anidadas y es muy difícil ver qué está pasando.
Actualmente estoy reelaborando uno de esos controles en Backbone.js. Como ejemplo final, aquí hay un resumen rápido de cómo mi proceso de pensamiento difiere cuando trabajo en el mismo control en ambas bibliotecas diferentes.
En jQuery, me preocupa:
- ¿Estoy usando el selector derecho para tomar el grupo de
li
elementos que quiero?
- ¿Necesito volver a completar esa lista de valores cuando se complete esta llamada Ajax?
- ¿Cómo puedo volver a poner estos valores de matriz en los
input
elementos de la página?
En Backbone, estoy más enfocado en:
- ¿Cuál es la lógica correcta para validar este conjunto de propiedades en mi artículo modelo?
- Cuando el usuario hace clic en el botón Agregar, ¿debo agregar un nuevo elemento a la colección de inmediato o debo esperar hasta que haya completado todos los datos y sea "válido"?
- ¿Cómo debería responder un artículo de mi colección cuando el artículo inmediatamente antes o después de que se elimine?
jQuery maneja los detalles esenciales, y Backbone es más de alto nivel.
Para terminar, observe que he estado usando las palabras "control" y "aplicación" al discutir ejemplos de Backbone.js. No es cierto que Backbone.js sea solo para aplicaciones de una sola página. Sin embargo, es cierto que Backbone.js es bueno para crear aplicaciones complejas que manipulan datos y manejan mucha lógica. Sería una tontería usarlo para elementos de interfaz de usuario a pequeña escala; la estructura adicional que impone no es necesaria.
Actualización: en el tema de varias páginas, sí, Backbone proporciona un mecanismo poderoso para conservar sus datos. Cada modelo tiene un save
método que ejecutará una llamada AJAX para almacenar los cambios en el servidor. Por lo tanto, siempre que guarde sus datos sobre la marcha, puede tener una aplicación de varias páginas. Es un modelo muy flexible y así es como probablemente terminemos usando Backbone en el trabajo. Si bien me encantaría crear una aplicación de una sola página, tenemos 10 años de trabajo en nuestra aplicación de varias páginas existente. Buscamos reconstruir algunos de nuestros componentes de IU más intensos en Backbone y luego sincronizar los cambios con el servidor antes de que el usuario se mueva a una página diferente.