繁体   English   中英

如何对余烬数据进行多对多自我反序列化

[英]How to deserialize self many-to-many for ember data

//Setup:
Ember: 1.3.2
Handlebars: 1.3.0
jQuery: 2.0.0
-----------------
MongoDB (_id's, embedded data)

我一直在尝试建立这样的自我多对多关系:

//Model:
App.Post = DS.Model.extend({
    title: DS.attr('string'),
    content: DS.attr('string'),
    links: DS.hasMany('App.Post'), 
});

出于明显的原因,链接应该作为id嵌入。

经过几天的探索,我设法使应用程序序列化并通过RESTAdapter正确提交数据,我正在使用的代码如下所示:

//Controller:
App.PostController = Ember.ObjectController.extend({
    actions: {
        addRelated: function(related) {
            var links = this.content.get('links').pushObject(related);
            this.content.save();
        }
    }
});

//Store:
App.Store = DS.Store.extend({
    revision: 12,
    adapter: DS.RESTAdapter.extend({
        url: '/admin/api',
        serializer: DS.RESTSerializer.extend({
            primaryKey: function(type) {
                return '_id';
            },
            addHasMany: function(hash, record, key, relationship) {
                if (/_ids$/.test(key)) {
                    hash[key] = [];
                    record.get(this.pluralize(key.replace(/_ids$/, ''))).forEach(function(post) {
                        hash[key].push(post.get('id'));
                    });
                }
                return hash;
            }
        })
    });
});

从我可以收集到的序列化程序期望的形式

{post: {...}, links: [{...},{...}]}

但是由于链接是post类型的,所以我尽可能不创建整个App.Links模型。

我可以将链接映射到帖子吗?

{post: {...}, posts: [{...},{...}]}

我尝试添加App.Post.find()但使用App.Post.find()时未调用

我猜我需要编写一个自定义的提取函数,该函数采用link_ids并将帖子从中提取到记录中吗?

pI尚未对此进行测试,但会说:

您应该将模型更改为如下所示:

App.Post = DS.Model.extend({
    title: DS.attr('string'),
    content: DS.attr('string'),
    links: DS.hasMany('post'), //changed 
});

您的JSON格式应为:

{"posts": [{ "id":3 ... post item .... "links":[3,10]} { "id":4... post item .... "links":[4,11]}]} 

除非已加载,否则所有链接都必须包含在JSON中。

我的理解是,您不必重写RESTAdapter和RESTSerializer,因为它应该开箱即用-如果没有,我首先要检查ajax和大小写。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM