2012-06-20 13 views
6

Veo que hay técnicas disponibles para tener modelos profundos en Backbone, pero ¿qué hay de las colecciones jerárquicas de un solo modelo?¿Cómo podemos representar las jerarquías profundas del modelo en Backbone.js

Un ejemplo obvio es un árbol de categorías. Entonces, podemos tener un modelo de categoría que tenga algunas propiedades, 'nombre', 'tipo', 'color', lo que sea.

En lugar de tener identificadores principales de estilo db relacional, estamos usando js, ​​por lo que queremos que los datos se representen como json.

¿Se puede aprovechar el backbone para apoyar (supuestamente aumentando colecciones) las estructuras de datos que contienen instancias de un único modelo en un árbol (de modo que los modelos y submodelos son todas instancias del mismo modelo)?

Respuesta

8

Eche un vistazo a Backbone-Relational o supermodel.js.

Estos proyectos proporcionan mejores formas de anidar modelo que la implementación predeterminada.

acabamos de modelos Backbone nido como:

var MyModel = Backbone.Model.extend({}); 
var MySubModel = Backbone.Model.extend({}); 

var model = new MyModel({submodel: new MySubModel({color: 'blue'})}); 

y nos anulan los métodos toJSON:

// nested models! Might just override the internal representation of this... 
_.extend(Backbone.Model.prototype, { 
    // Version of toJSON that traverses nested models 
    toJSON: function() { 
    var obj = _.clone(this.attributes); 
    _.each(_.keys(obj), function(key) { 
     if(!_.isUndefined(obj[key]) && !_.isNull(obj[key]) && _.isFunction(obj[key].toJSON)) { 
     obj[key] = obj[key].toJSON(); 
     } 
    }); 
    return obj; 
    } 
}); 

_.extend(Backbone.Collection.prototype, { 
    // Version of toJSON that traverses nested models 
    toJSON: function() { 
    return this.map(function(model){ return model.toJSON(); }); 
    } 
}); 

Así las representaciones JSON se ve bien si nosotros los modelos de nidos. Sin embargo, tendrá que prestar atención al método parse en su modelo: cuando recupere su JSON del servidor, tendrá que generar todos los submodelos y colecciones para que todo funcione correctamente.

+0

Y sí, ese primer método 'toJSON' podría escribirse mejor para hacer' if (key instanceof Backbone.Model) 'o algo así ... – tkone

+2

Gracias ... y si estamos recuperando todo el árbol como json del servidor en una sola solicitud ... ¿cómo hacemos para crear una instancia de todo de una vez? – hacklikecrack

Cuestiones relacionadas