Ember data: save loses belongsTo relationship

2020-05-06 10:27发布

I have the following problem:

A form with a select field for selecting the category of a post. Let's say the post has category 100. In Ember inspector, this is shown as follows:

category: <App.Category:ember708:100>

When I save the post (via Ember Data 1.0.0 beta 2), the category suddenly changes to:

category: 100

And the value is no longer selected in the select list. It is cleared.

Code to save:

    post.save().then(
            function () {
              alert("Save OK");
            }
    )

Any idea in which direction I need to search ... If I transition to another page and then go back to the edit screen, the values are all correct. The data is thus still correct in the model ...

3条回答
▲ chillily
2楼-- · 2020-05-06 10:57
beautiful°
3楼-- · 2020-05-06 11:00

Looks like this should be fixed now. https://github.com/emberjs/data/pull/1257

查看更多
来,给爷笑一个
4楼-- · 2020-05-06 11:02

Get the latest canary build, this will fix the belongsTo issue, but for hasMany I tried modifying the code of ember-data, and it worked so far,

Changed the line no 167 to

if (relationshipType === 'manyToNone' 
 || relationshipType === 'manyToMany' 
 || relationshipType === 'manyToOne') 

Update

Better solution is override serializeHasMany method in your serializer.

Thanks to @wycats (as per discussion on github #1273)

Something like

Deific.AppacitiveRESTSerializer = DS.RESTSerializer.extend({
    //primary key is '__id' in appacitive, overriding default behaviour
    primaryKey: '__id',

    serializeHasMany: function(record, json, relationship) {
        var key = relationship.key;

        var relationshipType = DS.RelationshipChange.determineRelationshipType(record.constructor, relationship);

        if (relationshipType === 'manyToNone' || relationshipType === 'manyToMany' || relationshipType === 'manyToOne') {
            json[key] = record.get(key).mapBy('id');
        // TODO support for polymorphic manyToNone and manyToMany relationships
        }
    }
});

Deific.Store = DS.Store.extend({
    revision: 12,
    adapter: DS.RESTAdapter.extend({
        namespace: 'service',
        defaultSerializer: 'Deific/appacitiveREST'
    }),
});

For time being this can be used. Hope this helps.

查看更多
登录 后发表回答