2011-10-20 11 views
12

Tengo varios años de desarrollo de Rails y pocos días de experiencia en Backbone.js. Después de estos días, creo que adquirí el sabor de Backbone.js. Me preguntaba sobre el tipo de duplicación que parece desarrollar las secuencias de comandos de cliente enriquecido Backbone.js con Rails en la parte posterior. Muchos de los modelos se vuelven a implementar parcialmente en el lado del Backbone (estructura del modelo y validaciones).Backbone.js con Rails: manejo de lógica duplicada en los modelos

¿Conoces la herramienta, gema que manejaría esta duplicación? ¿O generalmente tiene sentido abordar esto?

Lo siento por una posible pregunta especulativa. Me pregunto si alguien intentó abordar la cuestión de la duplicación del modelo de Rails/Backbone.

+3

Estaba buscando esto, el otro día también, y estoy esperando el libro electrónico ThoughtBot http://workshops.thoughtbot.com/backbone-js-on-rails que tendrá una sección llamada: 'Cliente/Servidor duplicado lógica de negocio 'sin embargo todavía no se ha iniciado. – sren

+0

@SimonRentzke ¡Gracias por el consejo! Voy a estar pendiente de este ebook. – fifigyuri

Respuesta

2

No es necesario crear una arquitectura de modelo duplicada para Backbone, aunque esa suele ser la forma más sencilla de hacerlo. (Hay js ampliaciones de red troncal que añaden has_many y todo eso, si vas por ese camino: https://github.com/dbrady/ligament.js y https://github.com/PaulUithol/Backbone-relational)

AVISO: No hacer lo siguiente, que es una mierda.

Pero puede pasar cualquier JSON a la red troncal que desee, y llamarlo un "modelo", y hacer un controlador por separado para gestionar el guardado de lo que haya puesto ahí. Eso puede ser mucho más desordenado, pero más sucinto si quieres enviar un glob de JSON a la red troncal y mantenerlo en un modelo.

Ejemplo:

# controller 
def index 
    @json = User.first.to_json(:include => {:address => {}, :contacts => {}) 
end 

Enviar que JSON para la columna vertebral, y usted tiene un objeto con relaciones anidadas, aunque es prácticamente de sentido a la espina dorsal sin alguna forma de mantener las relaciones, por lo que tendría para extraer los bits quieres tratar con JavaScript, volver a armarlos y hacer que tus acciones de creación/actualización en Rails sean lo suficientemente sofisticadas para manejar eso ...

Pero el punto es que puedes crear arbitrariamente cualquier tipo de objeto JSON que quieras - porque Backbone no sabe nada de lo que Rails hará con él. Backbone solo obtiene una URL para administrar sus solicitudes HTTP, y confía en que el servidor está configurado para manejar lo que sea que le ofrezca. Por lo tanto, siéntase libre de enviar y recibir exactamente el tipo de objetos JSON que desee, solo tenga en cuenta que tendrá que descubrir cómo lidiar con ellos en Rails si cruzan los modelos.

Realmente, es mucho más limpio solo para resistir y duplicar gran parte de la arquitectura del modelo en Backbone, desafortunadamente.

Creo que la cosa Backbone más mágica que he visto hasta ahora son las bibliotecas js-association-making mencionadas anteriormente. La columna vertebral sigue siendo bastante torpe.

Hay una gema llamada 'backbone-rails' o 'rails-backbone' (hubo un conflicto de proyecto extraño que la hizo nebulosa) por "codebrew" https://github.com/codebrew/backbone-rails, que generará un buen coffeescript para que usted pueda trabajar. Probablemente sea la forma más fácil de hacerlo, pero no tan breve como te gustaría, ya que es un generador de código.

Si alguien puede aclarar más sobre esto, o refutarme por completo, ¡por favor hazlo! Estoy en medio de mi conocimiento Backbone también.

P.S. Es posible que no desee confiar en Backbone para hacer validaciones ...:) Fácilmente pirateable. Si los está agregando en JS para reducir el número de envíos incorrectos, entonces tendrá que vivir duplicando las validaciones.

+0

Acabo de descubrir la gema rabl, que puede ayudar a organizar los modelos json de una manera diferente. ¡Muy genial! https://github.com/nesquena/rabl – wulftone

Cuestiones relacionadas