2011-06-08 18 views
8

Me lo estaba preguntando desde hace un tiempo y todavía no he encontrado una respuesta para esto.Combinación de Ruby on Rails y Backbone

¿para qué usar Backbone.js exaclty dentro de una aplicación Rails? ¿Es para ampliar la funcionalidad, tener un patrón MVC más para su JS, crear mejores API ...?

Por el momento no puedo ver una razón por la que usted quiere usarlo para algo, porque no creo que entiendo el concepto de Backbone.js

+0

http://backbonetutorials.com puede ayudarlo a comenzar. –

Respuesta

5

La gran ventaja de los carriles es que se tener una plataforma y un idioma que use que manejarán el código del servidor y pueden generar el código del cliente (usando las vistas).

Sin duda, esta ventaja teórica comienza a deslizarse rápidamente una vez que desee mejorar su experiencia de usuario con javascript y jquery. Entonces en realidad todavía tienes que aprender dos idiomas.

Pero aún así: todos sus modelos, reglas comerciales, ... se manejan en el servidor en Ruby. Esto también significa que el servidor siempre debe ser accesible.

Qué javacript/cliente MVC (como Backbone.js, SproutCore, ...) puede ofrecer es una sensación aplicación más nativo. Una única aplicación de página web, como p. Gmail. Dependiendo de sus requisitos, hay algunos casos de uso muy válidos para dicha plataforma. P.ej. en lugares o dispositivos con baja conectividad, podría ser muy útil (con HTML5) tener una aplicación web que no necesite estar "en línea" todo el tiempo. Podría guardar datos y ediciones en el almacenamiento local y sincronizar de nuevo al servidor/base de datos cuando el dispositivo vuelva a estar en línea.

Pero, hay una gran desventaja cuando se desarrollan aplicaciones cliente MVC en combinación con Rails: tendrá que hacer un doble desarrollo (es lo mismo cuando se usa flex/silverlight). Sus modelos deberán estar definidos tanto en el servidor como en el cliente. Me imagino que se podrían hacer algunas mejoras, como en el MVC del cliente, en realidad estás usando clases de presentador, que en el lado del servidor podrían almacenarse en diferentes modelos/tablas. Pero aún habrá duplicación de lógica, modelos, ...

Por eso creo que para la mayoría de las aplicaciones, por el momento, no es aconsejable cambiar a algún marco MVC de cliente. Será mucho más trabajo.

Pero cuando usted no necesita la apariencia de una aplicación nativa real, o una solicitud de una página web, a continuación, un cliente framework MVC Javascript es el camino a seguir. Y si necesita un marco cliente MVC, propondría Sproutcore.

Para simplemente ajaxificar su aplicación actual de rieles (reduce el tiempo de carga de cada página), eche un vistazo a pjax-rails.

+0

Para evitar la duplicación, podría tener un servidor delgado. Solo acceso y validación de datos. – Raynos

+0

Sí, pero Rails hace que sea muy fácil crear los modelos, agregar la validación, ... mientras que en Backbone/Sproutcore tendrá que redefinir los modelos, definir los atributos, agregar validación local, agregar lógica comercial (que tal vez no sea necesita más tiempo en el servidor?). Entonces todavía habrá código duplicado. Esta duplicación no se puede evitar ahora. – nathanvda

+0

evitar fue la palabra incorrecta. Para disminuir la duplicación, mueva parte del código que se encuentra en los raíles a la red troncal. Sin embargo, al usar un servidor delgado (almacenamiento y validación de datos), puede perder las ventajas de RoR. La única forma de evitar la duplicación es no utilizar los rieles. – Raynos

4

(mejor tarde que nunca - espero que esto sea útil para alguien) La descripción en el sitio web de backbonejs parece una gran cantidad de palabras juntas sin mucho significado. Hay un gran alboroto a su alrededor, pero ¿por qué tanto alboroto?

La premisa detrás de la columna vertebral es que de hoy en día, una sola página web (aplicaciones pensar Gmail) se convierten rápidamente en una interacción muy compleja entre elementos de sincronización dom, eventos de interfaz de usuario y el servidor. Puede encontrar fácilmente almacenar datos dentro de los elementos dom, y luego tener que extraer los datos de alguna manera para actualizar la base de datos. Si no estructura su código con mucho cuidado, rápidamente terminará con un código de spaghetti lleno de enlaces complejos o un código sin backbone.

El uso de los modelos, colecciones y vistas de la red troncal le ofrece una estructura bien pensada para trabajar, lo que le permite crear aplicaciones de gran tamaño sin verse abrumado por su complejidad. Además, se une maravillosamente con un backend relajante.

+0

¿Diría que Backbone.js se creó para el caso de uso de aplicaciones web de una sola página, mientras que una solución puramente Rails funciona bien cuando una aplicación web está compuesta de muchas páginas/pantallas? –

+1

En general, sí. Pero agregaría que incluso cuando su aplicación está compuesta de muchas páginas/pantallas, pero algunas de ellas están compuestas de grandes porciones de javascript, aún podría beneficiarse del uso de la red troncal para estructurar su código. ¿Escribirías un back-end de rieles en un solo archivo sin usar controladores o modelos? Probablemente no. De manera similar, si su código de interfaz está empezando a hacer algo un poco más complejo, la red troncal comenzará a agregar valor en la estructuración de su código. –