首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未加载hasMany数据

未加载hasMany数据
EN

Stack Overflow用户
提问于 2013-11-08 00:55:07
回答 2查看 447关注 0票数 0

我正在尝试加载包含两个hasMany子记录的父记录。以下是我的模型(顺便说一句,我正在使用ember-app-kit和最新的ember和ember-data金丝雀):

代码语言:javascript
复制
var Route = DS.Model.extend({
    name: DS.attr(),
    description: DS.attr(),
    creation: DS.attr(),
    modified: DS.attr(),
    active: DS.attr(),
    adhoc: DS.attr(),
    routeUsers: DS.hasMany('user'),
    userApprovals: DS.hasMany('userApproval')
});

export default Route;

var UserApproval = DS.Model.extend({
    user: DS.belongsTo('user'),
    amount: DS.attr(),
    approval: DS.attr(),
    comment: DS.attr(),
    denyRedirect: DS.belongsTo('user')
});

export default UserApproval;

var User = DS.Model.extend({
    firstname: DS.attr(),
    lastname: DS.attr(),
    username: DS.attr(),
    email: DS.attr(),

    fullName: function(){
        return this.get('firstname') + ' ' + this.get('lastname');
    }.property('firstname', 'lastname')
});

export default User;

下面是从我的mongodb实例返回的JSON:

代码语言:javascript
复制
{
  "route": {
    "name": "4",
    "description": "123",
    "adhoc": true,
    "_id": "527822dee56a06dc2a000002",
    "__v": 0,
    "user_approvals": [
      {
        "amount": "22",
        "user_id": "5277ca37b900b14c0e000003",
        "deny_redirect_id": "5277ca25b900b14c0e000002",
        "id": "f0ced142-aee1-4abb-f36a-56ae0088141b"
      }
    ],
    "route_users": [
      {
        "firstname": "first",
        "lastname": "last",
        "username": "flast",
        "email": "flast@xyz.com",
        "id": "5277ca37b900b14c0e000003"
      }
    ]
  }
}

以下是我的路由序列化程序:

代码语言:javascript
复制
import ApplicationSerializer from 'appkit/serializers/application';

var RouteSerializer = ApplicationSerializer.extend({
    attrs: {
        routeUsers: {
            embedded: 'always'
        },
        userApprovals: {
            embedded: 'always'
        }
    }
});

export default RouteSerializer;

我正在对_id的应用程序序列化程序进行规范化,这就是为什么我要在它的基础上扩展我的路由序列化程序。这是我的应用程序序列化程序中唯一的更改。

我遇到的问题是,当我的路由模型在控制器中加载和设置时,hasMany关系都不在那里。当我使用ember chrome扩展和控制台查看我的模型时,它看起来是这样的:

代码语言:javascript
复制
adhoc: true
description: "something here"
id: "527948268a65b92022000001"
name: "14"
routeUserIds: Array[1]
 0: "5277ca25b900b14c0e000002"
 length: 1
 __proto__: Array[0]
routeUsers: undefined
userApprovalIds: Array[1]
 0: "017b4fe7-9f98-4bce-9c8d-089309b7729a"
 length: 1
 __proto__: Array[0]
userApprovals: undefined
v: 0
__proto__: Object

因此,我知道我的路由被放置在模型中,我可以呈现诸如名称和描述之类的东西,但是我的hasMany关系没有任何东西。如何访问我的hasMany关系?我可以查看存储,并看到在有效负载交付后,我的hasMany关系正在加载到存储中。我尝试用下面的代码覆盖extractSingle:

代码语言:javascript
复制
extractSingle: function(store, type, payload, id, requestType) {
        var userApprovals = payload.route.user_approvals,
            approvalIds = userApprovals.mapProperty('id');

        payload.user_approvals = userApprovals;
        payload.route.user_approvals = approvalIds;

        return this._super.apply(this, arguments);
    }

但它呈现的结果与之前完全相同,没有加载hasMany信息,只加载了ids。

在过去的几天里,我一直在搜索,并找到了这个公关:

https://github.com/emberjs/data/pull/1404

但我还是不能让它工作。我确定我漏掉了什么,只是可能需要另一双眼睛来看。

谢谢,Jarred

EN

回答 2

Stack Overflow用户

发布于 2013-11-09 06:20:55

我能够通过暂时完全远离ember-data来解决我的问题。相反,我实现了ember-model,它开箱即用,非常适合我的情况。我正在使用mongodb和很多嵌入式记录。我知道这没有完全回答这个问题,但我需要关闭它,因为我不再需要我的原始问题的答案,因为移动到ember-model。

如果你遇到了同样的问题,并想知道我的设置,请给我发一条消息。

-Jarred

票数 0
EN

Stack Overflow用户

发布于 2013-11-26 00:51:03

首先,attrs是旧密钥到新密钥的直接字符串到字符串的映射,因此您当前使用的密钥是无效的。

这种确切的情况在TRANSITION.md文档中有详细的解释,我在下面引用它:

代码语言:javascript
复制
{
  "post": {
    "id": "1",
    "title": "Rails is omakase",
    "comments": [{
      "id": "1",
      "body": "I like omakase"
    }, {
      "id": "2",
      "body": "I prefer not to rely on elitist chefs"
    }]
  }
}

您可以像这样处理嵌入的记录:

代码语言:javascript
复制
App.PostSerializer = DS.RESTSerializer.extend({
  extractSingle: function(store, type, payload, id, requestType) {
    var comments = payload.post.comments,
        commentIds = comments.mapProperty('id');

    payload.comments = comments;
    payload.post.comments = commentIds;

    return this._super.apply(this, arguments);
  }
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19841908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档