javascript - tutorial - ¿Alguna recomendación para estructuras de datos profundas con Backbone?
backbone software (3)
Me he encontrado 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 un cirujano de colección de columna vertebral, cada cirujano tiene un modelo, pero sus procedimientos, equipos y consumibles serán simples matrices y objetos de JavaScript después de ser desempaquetados de JSON.
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, crear 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 encontrado un problema como este? ¿Cómo lo resolvió?
Entonces, una forma en que resolví este problema es haciendo lo siguiente:
Haga que todos los modelos hereden de un BaseModel personalizado y ponga 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); } }
Sobreescriba Backbone.sync y al principio deje que el modelo se serialice como lo haría normalmente:
model.set (response, {silent: true});
Luego verifique si el modelo tiene una función de actualización:
if (model.onUpdate) { model.onUpdate(); }
Luego, cada vez que tenga un modelo que desee generar submodelos y subcolecciones, implemente onUpdate en el modelo con algo como esto:
onUpdate: function() { this.convertToModel(''nameOfAttribute1'', SomeCustomModel1); this.convertToModel(''nameOfAttribute2'', SomeCustomModel2); }
Esto puede ser útil en tu caso: https://github.com/PaulUithol/Backbone-relational
Usted especifica las relaciones 1: 1, 1: n, n: n y analizará el JSON en consecuencia. También crea una tienda global para realizar un seguimiento de todos los registros.
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 necesitabas toda la información, también cargaba datos de manera lenta según las necesidades, pero enviaba objetos completamente poblados cuando era necesario para aumentar el rendimiento.