2012-01-09 18 views
10

estoy relativly nuevo a Backbone.js¿Cómo construir una colección/modelo de anidado JSON con Backbone.js

Tengo un JSON como muestra la imagen! Vi algunas respuestas en relación con Backbone-relational, ¡pero todavía no entiendo!

¿Cómo puedo convertir esto JSON a Backbone.js Collections/Models ??

¡Actualizo con un código pero no funciona como esperaba! no puedo ver un modelo cuando lo hago:

Mi estructura es:

[0]: es una colección de modelos

[claves] + ... + [Rest]: son colección de modelos

(clefs) => [0] + ... + [9]: son los modelos (el título contiene una cadena, Ruta también)

Muchas gracias !!

EDITAR (10.01.12):

Mi Solución:

window.initModel = Backbone.Model.extend({ 
    defaults: { 
    "title": "", 
    "path": "" 
    } 
}); 
window.CustomCollection = Backbone.Collection.extend({ 
    model: initModel 
}); 
window.Init = Backbone.Model.extend({ 
    url : function(){ 
    return "/api/data.json"  
    }, 

    parse: function(response) { 

    clefs = new CustomCollection(); 
    clefs.add(response.clefs);   
    this.set({clefs: clefs}); 

    ..... 

    rests = new CustomCollection(); 
    rests.add(response.rests);   
    this.set({rests: rests}); 
} 
}); 

this me ayudó también!

Nested Array

+0

¿Está buscando tener modelos/colecciones Backbone anidados también? (Esto no es así 100% necesario, dependiendo de sus requisitos). Es posible que pueda vivir con un solo modelo Backbone, con un solo objeto. –

+0

@trouble Después de tener una oportunidad con Backbone-Relational he ido con su solución (anulación de análisis). Con Backbone-Relational ciertos eventos 'add', etc. no se activaban y causaban problemas. ¡Gracias por publicar! – greenimpala

Respuesta

17

estoy en el trabajo, así que no puedo dar una respuesta totalmente codificada, pero el lo esencial es, puede hacer lo siguiente en sus modelos de nivel superior para lograr un modelo de jerarquía anidada:

var AmericasNextTopModel = Backbone.Models.extend({ 
    initialize: function(){ 

     this.set({ 
      clefs: new ClefCollection(this.get('clefs')), 
      accidentals: new AccidentalCollection(this.get('accidentals')), 
      notes: new NoteCollection(this.get('notes')), 
      rests: new RestCollection(this.get('rests')) 
     }); 
    } 
}); 

no consumo columna vertebral-relacional, así que no se puede dar una respuesta con respecto a eso.

¿Estás haciendo un visor/editor de partituras en línea? : D Cool Me encantaría verlo cuando termines.

+0

Sí, lo hago: D !! Te diré cuando estoy hecho! ¡realizo una actualización en mi post sobre tu respuesta! – trouble

0

El método reset (see 'reset') permite pasar de una matriz JSON a una colección. Esto es el equivalente de un método PUT, que reemplaza la colección especificada con el hash JSON.

También puede usar el método add para agregarlo a una colección existente, o pasar el hash JSON al constructor a medida que crea una nueva colección.

Vas a tener que hacer una limpieza básica de la matriz de conseguirlo en un formato apropiado, y luego convert it to JSON

+1

¡eh! ¡Veo tus puntos! pero esto realmente no me ayuda a construir una verdadera Colección de claves, ... ¿el descanso no lo es? ¡Realmente necesito tenerlo así que lo describo! ¡corrígeme si estoy equivocado! ¡Gracias! – trouble

+0

¡Malo! la imagen de arriba es un JSON! lo siento – trouble

0

Estoy usando PHP para obtener un feed como JSON ya que está en un dominio diferente. Guardo esos resultados en una variable JS, y luego tuve éxito al usar esto para obtenerlo en mi colección Backbone ...

var feedCollection = new Backbone.Collection(); 
feedCollection.set(myFeedJSON.nestedObject.nestedArrayIWant); 
Cuestiones relacionadas