2011-05-03 21 views
21

Me he topado con un dolor de cabeza con Backbone. Tengo una colección de registros específicos, que tienen subregistros, por ejemplo: los cirujanos tienen procedimientos programados, los procedimientos tienen equipos, algunos equipos tienen necesidades de consumibles (gases, líquidos, etc.). Si tengo una colección Backbone cirujanos, entonces cada cirujano tiene un modelo, pero sus procedimientos, equipos y consumibles serán simples matrices y objetos Javascript después de ser desempaquetados de JSON.¿Alguna recomendación para estructuras de datos profundas con Backbone?

Supongo que podría, en la Colección de Cirujanos, usar el análisis sintáctico() para hacer nuevas Recolecciones de Procedimiento, y a su vez hacer nuevas Recolecciones de Equipo, pero después de un tiempo esto se está convirtiendo en una bola de pelo. Para hacerlo más sensible desde el lado del servidor hay un solo punto de contacto que toma a un cirujano y sus cosas como un POST, por lo que propagar el 'conjunto' en un ConsumableModel automágicamente para desencadenar un 'guardado' en la jerarquía también hace que todo el enfoque jerárquico borroso.

¿Alguien más ha tenido un problema como este? ¿Cómo lo resolvió?

Respuesta

15

Esto puede ser útil en caso de que: https://github.com/PaulUithol/Backbone-relational

se especifica la relación 1: 1, 1: N, N: N y se analizará el JSON en consecuencia. También crea una tienda global para realizar un seguimiento de todos los registros.

+3

[Ligament.js] (https://github.com/dbrady/ligament.js) es otra posible solución. – user240515

+0

Backbone-relational es casi en su totalidad la respuesta a mis sueños. Me dirigí hacia ese camino desde el principio, pero esto está mejor pensado y es más elegante. –

2

Yo separaría los diferentes cirujanos, procedimientos, equipos, etc. como diferentes recursos en su servicio web. Si solo necesita actualizar el equipo para un procedimiento en particular, puede actualizar ese solo procedimiento.

Además, si no siempre necesita toda la información, también cargaría datos de manera lenta según sea necesario, pero enviará objetos completamente poblados donde sea necesario para aumentar el rendimiento.

+2

sólo quiero comentar que su sugerencia, si bien plausible, en contra del propósito de una interfaz REST, en el que el documento grueso (en este caso, Procedimiento) se pasa de ida y vuelta entre el servidor y el cliente. –

4

Por lo tanto, de una manera que soluciona este problema es de la siguiente manera:

  1. Tener todos los modelos heredan de una BaseModel personalizada y poner la siguiente función en BaseModel:

    convertToModel: function(dataType, modelType) { 
         if (this.get(dataType)) { 
          var map = { }; 
          map[dataType] = new modelType(this.get(dataType)); 
          this.set(map); 
         } 
        } 
    
  2. Anulación Backbone.sync y al principio deje que el modelo se serialice como lo haría normalmente:

    model.set (response, {silent: true});

  3. A continuación, comprobar para ver si el modelo tiene una función onUpdate:

      if (model.onUpdate) { 
           model.onUpdate(); 
          } 
    
  4. Entonces, cada vez que tenga un modelo que desea generar submodelos y subgrupos, implementar onUpdate en el modelo con algo como esto :

     onUpdate: function() { 
          this.convertToModel('nameOfAttribute1', SomeCustomModel1); 
          this.convertToModel('nameOfAttribute2', SomeCustomModel2); 
         } 
    
Cuestiones relacionadas