Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Ember js - Hasmany relationships breaks after updating other tables

I am using Ember.js with local-storage-adapter. I have a weird problem while updating records.

I have a post and comments model with hasMany relationships:

App.Post = DS.Model.extend({     title: DS.attr('string'),     comments: DS.hasMany('comment', {         async: true     }) }); App.Comment = DS.Model.extend({     message: DS.attr('string') }); 

These are my post and comments controllers:

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();         }     } }); 

While creating records hasMany relations updated correctly.

{     "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"             }         }     } } 

The problem occured while editing post. The relationships are gone after editing the post record. I did some searching and found this code:

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         }     } }); 

This did the trick and it worked fine. But now I have another problem. If I edit any other record, all the id references are replaced by whole object like this:

{"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"}}}} 

Comment refrences should be comments":["p31al","tgjtj"] like this. but the ids are replaced as "comments":[{"message":"comment 1"},{"message":"comment 2"}]

like image 876
viji Avatar asked Oct 26 '13 07:10

viji


1 Answers

When using ApplicationSerializer which extends LSSerializer, it seems to work.

Maybe it got fixed since asked?

like image 61
BBLN Avatar answered Sep 28 '22 05:09

BBLN