javascript jquery ajax model-view-controller ember.js

javascript - ember.js y el servidor



jquery ajax (4)

En Ember.js, el "modelo" contenido en el objeto Ember contendrá una abstracción adicional de una base de datos subyacente del lado del servidor, si está utilizando una. La parte del controlador de la aplicación debe tener métodos que le permitan recuperar y enviar datos que se llaman cuando sea necesario para actualizar el modelo (usando Ajax). Esto es bueno porque tienes un modelo que puede responder rápidamente en el lado del cliente a cualquier entrada que el usuario proporcione a la aplicación (teclas, movimientos del mouse, lo que sea) y elegir selectivamente cuándo realizar consultas relativamente costosas a una base de datos del servidor, por ejemplo. De esta forma, parte del rendimiento de la aplicación ya no se ve obstaculizado por la latencia de las solicitudes de datos a un servidor externo, que en algunos casos puede permitirle crear aplicaciones cuya capacidad de respuesta se aproxima a la de las aplicaciones nativas.

Estoy mirando Ember.js y he estado leyendo los documentos para tratar de entender cómo usarlo. Lo entiendo (bastante bien), excepto por una cosa. A mi modo de ver en el patrón MVC, el Modelo es el repositorio de datos en la aplicación. Puedo ver cómo funciona eso para los datos del lado del cliente en Ember.js. Lo que no entiendo es cómo vincular esos datos al servidor para que, si los datos cambian en el cliente, los cambios se actualicen en el servidor. Y viceversa. He estado haciendo esto en mis aplicaciones web haciendo llamadas de Ajax / JSON al servidor, no estoy obteniendo cómo hacerlo con Ember.js.


Excavando un poco alrededor de emberjs en GitHub He encontrado esto: https://github.com/emberjs/data :

Ember Data es una biblioteca para cargar modelos desde una capa de persistencia (como una API JSON), actualizar esos modelos y luego guardar los cambios. Proporciona muchas de las instalaciones que encontrará en los ORM del lado del servidor, como ActiveRecord, pero está diseñado específicamente para el entorno único de JavaScript en el navegador.

También sugeriría leer Ember.js Live Collections . Lo que quiere es tener una colección de modelos que sepa cómo sincronizar con el lado del servidor, el posible código de ejemplo es:

// our model App.Person = Ember.Object.extend(); App.people = Ember.ArrayController.create({ content: [], save: function () { // assuming you are using jQuery, but could be other AJAX/DOM framework $.post({ url: "/people", data: JSON.stringify( this.toArray() ), success: function ( data ) { // your data should already be rendered with latest changes // however, you might want to change status from something to "saved" etc. } }); } });

Luego, llamaría a App.people.save() en las ocasiones necesarias.

También asegúrese de consultar este artículo, Consejos e instrucciones en el uso de Ember.js , que profundiza en la comunicación servidor-cliente con Ember y también menciona https://github.com/emberjs/data .

Nota : Emberjs Data Library debe usarse con precaución por el hecho de que no está lista para producción.


Me doy cuenta de que esto es un poco viejo de una pregunta, pero está en la página mejor calificada para ember.js, así que pensé que agregaría un poco.

Últimamente uso ember-model para manejar el enlace de datos RESTful. Tiene menos campanas y silbatos, pero para mis necesidades es bastante decente. Básicamente, simplemente amplía la funcionalidad del modelo para integrarse razonablemente bien con un servidor que empuja los objetos JSON a través de una interfaz REST estándar.


Me gusta imaginar a Ember.js en parejas como esta

  • Las vistas y las plantillas están correlacionadas (obviamente), modifique la clase Views para controlar la plantilla (como classNames)
  • Router y Routes funcionan un poco como el controlador en MVC. Ellos son responsables de enrutar la solicitud al punto final correcto
  • El controlador y el modelo están centrados en el modelo, uno (el modelo) describe los datos que manejará en su aplicación mientras el controlador se comporta como un tipo de proxy (o decorador, si eso es más importante). Las plantillas se conectarán al controlador, por ejemplo, y

Básicamente eso significa que carga su controlador (simple o matriz) con un modelo y ahora puede modelar fácilmente los procesos que trabajan en ese modelo (es decir, las cosas que no afectan al modelo en su núcleo / datos) en su controlador. Para una aplicación de blog de ejemplo, describiría la publicación en el modelo y agregaría algo así para el controlador

App.PostController = Ember.ObjectController.extend({ content: null, // initial value isExpanded: false, expand: function() { this.set(''isExpanded'', true) }, contract: function() { this.set(''isExpanded'', false) } });

Ahora puede interactuar con la representación del modelo en términos de pensamiento frontend a través del controlador. Expandir una publicación o no no cambia el modelo, solo cambia los datos.

En términos de volver a cargar los datos del servidor, tengo dos respuestas para ti

  1. Encontré este artículo bastante útil para entender las conexiones (y encuestas sencillas, aunque simples)
  2. Si usa Rails, tendrá suerte con Rails 4 Live, vea esta publicación y la demo de las partes más jugosas.