2012-03-20 9 views
8

Estoy buscando una solución para hacer frente a un problema de estado entre los modelos que usan backbone.js.¿Se pueden enviar datos adicionales que no son del modelo en una solicitud de guardado con backbone.js?

Tengo una aplicación de seguimiento de tiempo donde un usuario puede iniciar/detener trabajos y registrará el tiempo de trabajo. Tengo un modelo de trabajo que contiene los datos del trabajo y si actualmente está 'encendido'.

Solo se puede trabajar con 1 trabajo a la vez. Por lo tanto, si un usuario inicia un trabajo, se debe detener el trabajo que se está ejecutando actualmente. Me pregunto cuál es la mejor solución para hacer esto. Quiero decir, simplemente podría alternar el parámetro 'on' de cada trabajo en consecuencia y luego llamar a guardar en cada uno, pero eso da como resultado 2 solicitudes al servidor, cada una con una representación completa de cada trabajo.

Idealmente, sería genial si pudiera incluir datos adicionales en la solicitud de guardado de forma similar a cómo es posible enviar datos adicionales en una solicitud de recuperación. Solo necesito enviar el ID del trabajo que se está ejecutando en ese momento y, dado que esto no está relacionado con el modelo, debe enviarse junto con el modelo, no formando parte del mismo.

¿Hay una buena manera de hacerlo? Supongo que podría encontrar una forma de mantener una referencia al lado actual del servidor de trabajo si fuera necesario: \

Respuesta

8

cuando llama a una función de guardado, el primer parámetro es un objeto de los datos que se guardarán. En lugar de simplemente llamar al model.save(), cree un objeto que tenga los datos del modelo y sus elementos adicionales.

interior de su método que dispara el salvamento:

... 
var data = this.model.toJSON(); 
data.extras = { myParam : someData }; 

this.model.save(data, {success: function(model, response) { 
    console.log('hooray it saved: ', model, response); 
}); 
... 
+2

Es importante señalar que si bien esto no envía los datos adicionales no modelo, lo hará a continuación _SET_ los datos del modelo y luego se convierten en datos del modelo . Al igual que en mi caso, es posible que no desee esto y solo quiera enviar 1 o 2 params adicionales en la solicitud que no sea para el modelo. Necesita 'this.model.unset ('foo', {silent: true})' para eliminar las propiedades adicionales –

+0

@ryanmarc, pero esto hace el trabajo para enviar los datos adicionales, pero este no es un buen método para enviar el datos con modelo. –

+2

@RobinsGupta En lugar de comentar que una respuesta de más de 2 años de antigüedad no es correcta, ¿por qué no agregar una respuesta actualizada? El backbone se encontraba en un estado muy diferente en 2012 de lo que es hoy. – ryanmarc

Cuestiones relacionadas