2011-09-28 18 views
5

He heredado una aplicación basada en la red troncal js. Realmente me gusta la columna vertebral y estoy empezando a entenderlo. Desde mi entendimiento cuando se llama a model.save en una nueva entidad, debe publicar eso en el servidor, el servidor debe devolver el mismo json pero con un ID asignado y la columna vertebral debe persistir esa identificación en el modelo para que los resultados posteriores de una PUT con la identificación para la actualización.backbone.js model.save no establece el id

Sin embargo, cuando llamo al model.save() y luego trato de obtener la propiedad model.id, es nulo.

¿Esto es porque no lo estoy haciendo con una devolución de llamada? Entonces, ¿la propiedad no se ha establecido aún?

¿Cómo establecería la devolución de llamada exitosa? llamar al model.save({success: function(){...}}) no funciona?

aquí es la llamada real:

model.save(null, { 
    success: function() { 
     alert('success'); 
    }, 
    error: function() { 
     alert('error'); 
    } 
}); 
+0

¿Ha tratado de establecer la respuesta de error también? – mamoo

+0

sí - ninguno se llama – iwayneo

+0

¿ha verificado que el servidor efectivamente se llama? – timDunham

Respuesta

4

algo se siente extraño en esto. La configuración silent: true solo lo hace para que ninguno de los eventos sea despedido. Todo lo demás debería suceder normalmente. En otras palabras, no asuma que la fijación de slient: true es la respuesta aquí ...

sospecho que en realidad se está lanzando una excepción en algún lugar (probablemente con la validación o algo por el estilo) y de alguna manera, el establecimiento de silent: true está causando todo para fluir

Le sugiero encarecidamente que elimine esta opción y verifique su consola o ejecute con el depurador ... Sospecho que tiene un error al acecho en algún lugar.

Algunas sugerencias: Dale un vistazo a la annotated source para la función model.set. Se llama antes de llamar a su success devolución de llamada. Dentro de esa función, hay varias cosas que sucederán si silent es falso. Estos incluyen validation, disparadores individuales property change y un disparador global change. Apostaría dinero a que la validación está fallando o algo que está escuchando los cambios está arrojando una excepción.

+0

Bien, voy a echar un vistazo por la mañana e informar :) – iwayneo

+0

Entonces, ¿cuál fue el problema? –

0

que necesitaba para establecer el silencio: cierto en el ahorrar:

model.save(null, { 
     silent: true, 
     success: function() { 
      alert('success'); 
     }, 
     error: function() { 
      alert('error'); 
     } 
    }); 
+1

Hmmmm ... Sospecho que esto no es una solución aleatoria, pero estás ocultando un error en tu código al hacer esto. Echa un vistazo a mi respuesta. –

0

que tenían el mismo problema, resultó ser debido a mi costumbre parse estaba fallando

Cuestiones relacionadas