Emberjs 深度模型关联在模板中不可用



我是Emberjs的新手,我正在尝试了解如何从模型中获取数据。

这是从我的服务器返回的数据结构

candidate: {
    image: [image],
    user: {
         name: [User Name]
    }, 
    agent: {
        phone: [phone]
        team: {
            name: [Team Name]
        }
        user: {
            name: [User Name]
        }
    }
}

我无法让余烬识别任何超过一级的关联。

这是我的候选控制器

App.CandidateController = Ember.ObjectController.extend({
   location: function() {
        var address = this.get('address');
        var city = this.get('city');
        var state = this.get('state');
        var zip = this.get('zip');
        return address + ' ' + city + ' ' + state + ', ' + zip;
    }.property('address', 'city', 'state', 'zip')
});
App.CandidateSerializer = DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, {
    attrs: {
        agent: {embedded: 'always'},
        user: {embedded: 'always'}
    }
});

这允许我深入一个层次,但我需要两到三个层次的关联。

有没有不同的方法可以做到这一点?

我认为按照我希望它显示的方式组织服务器上的所有内容,并且只是返回应该呈现给 ember 的数据,但我有一种感觉,在尝试更新模型时会遇到问题。

任何帮助,不胜感激。

/******更新*******/

我已经重构了我的代码,现在我从序列化程序返回数据,如下所示:

{
    candidate: {
        // relevant fields
    },
    agent: {
        //relevant fields
    },
    team: {
        // relevant fields
    }
    user: [
        {  //  candidate user fields    },
        {  //  agent user fields    }
    ]
};

但是,我的模板中仍然没有数据。在 Ember chrome 扩展名中,在数据选项卡中,我得到

candidate: (1)
agent: (0)
team: (0)
user (2) 

我可以看到候选人和用户数据,但看不到代理或团队数据。 在我的候选模型中,我有:

App.Candidate = DS.Model.extend({
    // other fields
    user_id: DS.attr('number'),
    agent_id: DS.attr('number'),
    user: DS.belongsTo('user'),
    agent: DS.belongsTo('agent')
});

似乎归属协会实际上并没有做任何事情。

所以第一个问题是我没有获得正确的数据,第二个问题,也是让我觉得我做错了这个问题的问题,是我需要在模板中显示两个用户信息。 第一个是与候选人关联的用户信息,第二个是与代理关联的用户信息。 这两个数据需要显示在同一模板中。 由于数据没有层次结构,模板如何知道要在每个位置显示哪些用户信息?

再一次,我认为我对整个事情的想法是错误的。

感谢您的帮助。

Ember 数据期望 JSON 响应中的模型是平面的,序列化程序的工作是将服务器响应转换为该格式。关联通常由 id 完成。第二关不起作用,因为 Ember 需要将每个关卡变成一个Ember.Object才能观察属性变化。

查看指南的 JSON 约定部分可能会有所帮助。您还可以将模型插入 ember 数据模型制作器,并查看响应的外观。最后,请确保您使用的是 ember-inspector Chrome 扩展程序。当我调试与 ember 数据相关的问题时,通常最简单的方法是在 model 钩子返回后停止,查看检查器的存储选项卡,并检查已加载的数据。

最新更新