Ich bin Neuling zu MongoDB und Backbone, also versuche ich, sie zu verstehen, aber es ist schwer. Ich habe ein großes, großes Problem: Ich kann nicht verstehen, wie Attribute in Backbone.Model manipuliert werden, um in Views nur das zu verwenden, was ich brauche. Speziellere - Ich habe ein Modell:MongoError: kann _id eines Dokuments nicht ändern
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"
});
Und ich habe eine Ansicht:
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');
}
});
}
Ich habe zu verwenden 'setzen' Methode Whit Daten aus beliebigen Bereichen mit Ausnahme von '_id', so muss es sein smth wie:
{"name": "Foo", "email": "[email protected]"}
Aber jedes Mal, hängt nicht davon ab, was ich es tun senden
012.351.{**"_id": "5083e4a7f4c0c4e270000001"**, "name": "Foo", "email": "[email protected]"}
und dieser Fehler vom 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
Vielen Dank im Voraus!
Wenn Sie 'model.save nennen()' ist ein POST durchgeführt oder eine PUT werden? – InPursuit
es ist PUT durchgeführt. 'app.get ('/ user /: id', usr.findById); app.put ('/ user /: id', usr.updateUser); ' – Pruntoff
Wenn der Backbone beim Aufruf von' save' einen PUT ausführt, sollte das IDAttribute des Modells (_id in Ihrem Fall) nicht gesendet werden. Können Sie 'isNew()' auf Ihrem Modell vor 'save()' aufrufen und sicherstellen, dass es 'false' zurückgibt? Überprüfen Sie außerdem, dass 'this.model.id' vor dem Aufruf von' save() 'nicht null oder undefiniert ist. – InPursuit