Ich benutze Ember.js mit lokalen-Speicher-Adapter. Ich habe ein seltsames Problem beim Aktualisieren von Datensätzen.Ember js - Hasmany Beziehungen bricht nach der Aktualisierung anderer Tabellen
Ich habe einen Post und Kommentare Modell mit hasMany Beziehungen:
App.Post = DS.Model.extend({
title: DS.attr('string'),
comments: DS.hasMany('comment', {
async: true
})
});
App.Comment = DS.Model.extend({
message: DS.attr('string')
});
Diese meine Post und Kommentare sind Controller:
App.PostsController = Ember.ArrayController.extend({
newTitle: '',
actions: {
create: function() {
var title = this.get('newTitle');
var post = this.store.createRecord('post', {
title: title
});
this.set('newTitle', '');
post.save();
}
}
});
App.CommentsController = Ember.ArrayController.extend({
needs: "post",
post: Ember.computed.alias("controllers.post.model"),
newMessage: '',
actions: {
create: function() {
var message = this.get('newMessage');
var comment = this.store.createRecord('comment', {
message: message
});
var post = this.get('post');
var comments = post.get('comments');
if (comments.get('content') == null) comments.set('content', []);
comments.pushObject(comment);
comment.save();
post.save();
}
}
});
Beim Erstellen Aufzeichnungen hasMany Beziehungen korrekt aktualisiert.
{
"App.Post": {
"records": {
"0v66j": {
"id": "0v66j",
"title": "post1",
"comments": ["p31al", "tgjtj"]
}
}
},
"App.Comment": {
"records": {
"p31al": {
"id": "p31al",
"message": "comment 1"
},
"tgjtj": {
"id": "tgjtj",
"message": "comment 2"
}
}
}
}
Das Problem trat beim Bearbeiten von Post auf. Die Beziehungen sind nach dem Bearbeiten des Postdatensatzes verschwunden. Ich habe etwas gesucht und diesen Code gefunden:
DS.JSONSerializer.reopen({
serializeHasMany: function(record, json, relationship) {
var key = relationship.key;
var relationshipType = DS.RelationshipChange.determineRelationshipType(record.constructor, relationship);
// alert(relationshipType);
if (relationshipType === 'manyToNone' || relationshipType === 'manyToMany' || relationshipType === 'manyToOne') {
json[key] = Ember.get(record, key).mapBy('id');
// TODO support for polymorphic manyToNone and manyToMany
// relationships
}
}
});
Dies hat den Trick und es hat gut funktioniert. Aber jetzt habe ich ein anderes Problem. Wenn ich andere Datensatz bearbeiten, alle id Verweise sind durch ganze Objekt wie folgt ersetzt: „
{"App.Post":{"records":{"0v66j":{"id":"0v66j","title":"post2","comments":[**{"message":"comment 1"},
{"message":"comment 2"}**]},"8nihs":{"id":"8nihs","title":"post3","comments":["b4v2b","dbki4"]}}},
"App.Comment":{"records":{"p31al":{"id":"p31al","message":"comment 1"},"tgjtj":{"id":"tgjtj","message":"comment 2"},
"b4v2b":{"id":"b4v2b","message":"comments3"},"dbki4":{"id":"dbki4",
"message":"comments4"}}}}
Kommentar refrences sollte Kommentare sein. [“ P31al“,‚tgjtj‘] wie dies aber die Ide werden als "Kommentare" ersetzt: [{"message": "kommentar 1"}]
Kann man den Kommentar nur dynamisch aktualisieren? Anstatt das gesamte Json-Objekt zurückzugeben? – yardpenalty