Cómo construir modelos backbone.js anidados que se puedan reutilizar con diferentes métodos de sincronización subyacentes

StackOverflow https://stackoverflow.com/questions/7303663

Pregunta

Estoy construyendo una aplicación pesada de JavaScript que presenta dos vistas diferentes al usuario. Una visión es a través de la interfaz web de mi propia aplicación y, por lo tanto, puede usar una API RESTFUL para conectarse, la otra está en un dispositivo OpenSocial (y, por lo tanto, utiliza la API OpenSocial para obtener y recuperar datos).

Lo que he hecho hasta ahora es tener un conjunto común de modelos/vistas que pueda reutilizar tanto en la interfaz web como en el dispositivo OpenSocial, y usar una mezcla para reemplazar los métodos de sincronización para el dispositivo OpenSocial.

p.ej.

MyBaseModel = Backbone.Model.extend({
    ... typical backbone model
});

MyOpenSocialMixin = {
    sync: function(...) {
        // Sync via opensocial here
    }
};

myOpenSocialModel = MyBaseModel.extend(MyOpenSocialMixin);
myOpenSocialModel.sync(); // works on opensocial

myAppModel = new MyBaseModel();
myAppModel.sync(); // works on the normal interface

Esto funciona muy bien para un solo modelo, pero no funciona para modelos anidados (por ejemplo, si MyBasemodel contiene una serie de mysubmodels). ¿Cuál es la mejor práctica para lidiar con esta situación? ¿Deberían mis modelos anidados heredar el método Sync () de sus padres? ¿Hay un mejor patrón de diseño?

¿Fue útil?

Solución

Ciertamente sería posible, en el constructor de una clase infantil, pasar el método de sincronización de los padres. Si el método está sin consolidar, puede copiarlo en la clase infantil de la misma manera que Backbone lo hace:

def initialize(attributes, options) {
    _.extend(this, {sync: options.parent.sync});
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top