javascript - 如何对 ember 数据进行多对多反序列化

标签 javascript rest ember.js ember-data

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

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

//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: [{...},{...}]}

我尝试添加 deserializeHasMany 但在使用 App.Post.find() 时没有被调用

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

最佳答案

p我还没有测试过这个,但会说:

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

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 和大写。

关于javascript - 如何对 ember 数据进行多对多反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21870384/

相关文章:

javascript - 使 SVG 文本不可选择

PowerShell 获取带有正文的请求

python - 如何用 Python 获取 Json 数据?

javascript - node.js 中的计算属性

ember.js - Ember.Component 的 sendAction() 查看目标

javascript - JS/TS判断一个JSON对象是否实现类或接口(interface)

javascript - 如何更有效地管理html按钮点击事件?

Javascript 菜单 - 将 javascript 缩略图库复制到每个区域不起作用

java - 坩埚 REST API : Can't add reviewer

javascript - 当它依赖于另一个模型时创建模型