Según la documentación de Backbone.js, Model-parse hace lo siguiente:

parse se llama cada vez que el servidor devuelve los datos de un modelo, en la búsqueda y en el guardado.

Para aumentar los modelos que ya cargué, utilizo Model.parse(). Lo logro usando fetch para hacer una solicitud adicional de datos, luego uso esos datos para agregar propiedades a un modelo existente.

Ejemplo:

El objeto de recuperación es {age: 19}
después de que el analizador sea {age: 19, isAdult: true}

Cuando realizo la solicitud de guardado, en la solicitud PUT también tengo otros parámetros que no son necesarios (por ejemplo, isAdult). Me gustaría tener el modelo original (sin parámetros adicionales en la solicitud PUT).

¿Cuál es la mejor manera de lograr mi objetivo en Backbone?

0
antonjs 18 may. 2012 a las 01:03
- Tu pregunta no fue muy clara. Traté de eliminar la idea creo que estabas tratando de transmitir. Asegúrate de que mi edición sea fiel a tu problema.
 – 
EBarr
18 may. 2012 a las 01:52
Entendiste el punto de mi pregunta. Gracias.
 – 
antonjs
18 may. 2012 a las 10:07

1 respuesta

La mejor respuesta

Si entiendo tu pregunta correctamente ...

Cuando la red troncal habla con un servidor mediante un guardado, envía una representación completa del modelo. Como dicen los docs:

El hash de atributos (como en el conjunto) debe contener los atributos que me gustaría cambiar - las claves que no se mencionan no se modificarán - pero, un Se enviará al servidor una representación completa del recurso .

Entonces, el comportamiento predeterminado es enviar el modelo completo. Si desea implementar su propia lógica, tendrá que anular el método sync. Examine un poco el código troncal expandido y verá este comentario arriba sync:

// Anula esta función para cambiar la forma en que persiste Backbone
// modelos al servidor. Se le pasará el tipo de solicitud y el modelo en cuestión.

Usaría la implementación predeterminada de sincronización como mi punto de partida.

2
EBarr 18 may. 2012 a las 01:45
1
sync eventualmente hace un model.toJSON() para obtener el data para la llamada $.ajax para que puedas piratear un sync en el modelo que solo usa una porción del valor toJSON normal. Sigo pensando que arreglar el código del servidor para incluir en la lista blanca todos los datos entrantes tiene sentido, pero reemplazar sync también tendría sentido si isAdult fuera una gran cantidad de cosas adicionales en lugar de una simple bandera booleana.
 – 
mu is too short
18 may. 2012 a las 02:01
1
- Estoy de acuerdo con la lista blanca. Viniendo de una perspectiva de .net MVC / WebAPI, está horneado en el pastel con la carpeta de modelos. Aunque, también entiendo el instinto de eliminar datos extraños de las llamadas, especialmente si las llamadas son de alta frecuencia (cadenas más cortas para analizar el lado del servidor) o puede evitar que muchos K de datos atraviesen el cable (muchos mensajes de texto innecesarios? ¿pocos K pueden marcar una gran diferencia?).
 – 
EBarr
18 may. 2012 a las 02:06
1
Para que conste, no estoy en desacuerdo contigo. Y sí, los bytes se suman bastante rápido en el mundo móvil. De hecho, creo que Backbone debería tener un método unparse o serialize que sync podría usar en lugar de toJSON, el valor predeterminado sería return _.clone(this.attributes) como toJSON lo hace, pero un método distinto sería bueno para este caso de uso particular y ofrecería una buena simetría con el parse existente. Quizás debería hacer una solicitud de extracción.
 – 
mu is too short
18 may. 2012 a las 02:12
Eso me suena como una solución viable. Sé que lo utilizaría.
 – 
EBarr
18 may. 2012 a las 02:44