Sono novizio di MongoDB e Backbone, quindi cerco di capirli, ma è difficile. Ho un grosso problema: non riesco a capire come manipolare gli attributi in Backbone.Model per utilizzare solo in Views ciò di cui ho bisogno. Più specifica - Ho un modello :MongoError: impossibile cambiare _id di un documento
window.User = Backbone.Model.extend({
urlRoot:"/user",
idAttribute: "_id",
defaults: {
_id: null,
name: "",
email: "[email protected]"
}
});
window.UserCollection = Backbone.Collection.extend({
model: User,
url: "user/:id"
});
e ho un Visualizza:
beforeSave: function(){
var self = this;
var check = this.model.validateAll();
if (check.isValid === false) {
utils.displayValidationErrors(check.messages);
return false;
}
this.saveUser();
return false;
},
saveUser: function(){
var self = this;
console.log('before save');
this.model.save(null, {
success: function(model){
self.render();
app.navigate('user/' + model.id, false);
utils.showAlert('Success!', 'User saved successfully', 'alert-success');
},
error: function(){
utils.showAlert('Error', 'An error occurred while trying to save this item', 'alert-error');
}
});
}
devo usare i dati metodo di Pentecoste 'put' da tutti i campi ad eccezione di '_id', quindi deve essere smth come:
{"name": "Foo", "email": "[email protected]"}
Ma ogni volta, non dipende da quello che faccio che invia
012.351.{**"_id": "5083e4a7f4c0c4e270000001"**, "name": "Foo", "email": "[email protected]"}
e questo errore da server:
MongoError: cannot change _id of a document old:{ _id: ObjectId('5083e4a7f4c0c4e270000001'), name: "Foo" } new:{ _id: "5083e4a7f4c0c4e270000001", name: "Bar", email: "[email protected]" }
Github link: https://github.com/pruntoff/habo
Grazie in anticipo!
Quando si chiama 'model.save()' è un post in corso di esecuzione o di un PUT? – InPursuit
eseguito PUT. 'app.get ('/ utente /: id', usr.findById); app.put ('/ utente /: id', usr.updateUser); ' – Pruntoff
Se il backbone esegue un PUT quando si chiama' save', l'idAttribute del modello (_id nel tuo caso) non deve essere inviato. Puoi chiamare 'isNew()' sul tuo modello prima di 'save()' e verificare che restituisca 'false'? Verifica anche che 'this.model.id' non sia nullo o indefinito prima di chiamare' save() ' – InPursuit