灰烬数据:保存失去的属性关系

时间:2013-09-09 17:37:54

标签: ember.js ember-data

我有以下问题:

带有选择字段的表单,用于选择帖子的类别。假设帖子有100类。在Ember检查器中,显示如下:

category: <App.Category:ember708:100>

当我保存帖子时(通过Ember Data 1.0.0 beta 2),该类别突然变为:

category: 100

并且在选择列表中不再选择该值。它被清除了。

保存代码:

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

我想知道我需要搜索哪个方向...如果我转换到另一个页面然后返回编辑屏幕,则值都是正确的。因此,数据在模型中仍然是正确的......

3 个答案:

答案 0 :(得分:3)

获取最新的canary build,这将解决belongsTo问题,但对于hasMany我尝试修改了ember-data的代码,并且它到目前为止工作了,

将第167行更改为

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

<强>更新

更好的解决方案是在序列化程序中覆盖serializeHasMany方法。

感谢 @wycats (根据github上的讨论#1273

这样的东西
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'
    }),
});

暂时可以使用。希望这会有所帮助。

答案 1 :(得分:0)

看起来像是Ember数据中的错误:https://github.com/emberjs/data/issues/1228

答案 2 :(得分:0)

现在看来应该修复此问题。 https://github.com/emberjs/data/pull/1257