1

我有这两个资源:

App.Users = DS.Model.extend({
    first_name: DS.attr('string'),
    last_name: DS.attr('string'),
    email: DS.attr('string'),
    userprofile: DS.belongsTo('App.Userprofiles', {embedded:true}),
    fullName: function() {
        return this.get('first_name') + ' ' + this.get('last_name');
    }.property('first_name', 'last_name'),
    didLoad: function() {
        console.log('Developer model loaded', this);
    }
});

App.Userprofiles = DS.Model.extend({
    company: DS.attr('string'),
    user: DS.belongsTo('App.Developers'),
    didLoad: function() {
        console.log('Developer Profile model loaded', this);
    }
})

这些是我的视图和控制器:

App.UserInfoController = Ember.ObjectController.extend({
    content: App.store.find(App.Users, 1),
}).create();

App.UserInfoView = Ember.View.extend({
    controller: App.UserInfoController,
    contentBinding: 'controller.content'
});

这是来自我的 API 的用户的示例响应

{
  "email": "foo@gmail.com",
  "first_name": "George",
  "id": "1",
  "last_name": "Eracleous",
  "resource_uri": "/api/v1/users/1/",
  "userprofile": {
    "company": "bar",
    "id": "1",
    "resource_uri": "/api/v1/userprofiles/1/",
    "user": "/api/v1/users/1/"
  }
}

用户对象已正确加载,但是当我尝试执行 get("userprofile") 时,我得到空值。有人知道我做错了什么吗?

4

1 回答 1

1

为了加载嵌入的相关对象,您必须通过调用其“映射”函数来配置适配器使用的序列化程序。我知道的唯一方法是对序列化程序进行子类化并向其添加一个“init”函数,您可以在其中对 map 进行必要的调用。对于每个模型类的每个嵌入关系,您都必须调用“map”。这适用于一对一和对多关系。确保将您的适配器配置为使用此序列化程序。例如,请参阅对上一个问题的回答。您也可以在线查看此示例

如评论中所述,您可以直接在适配器类上调用 map() ,而不是继承序列化程序并在初始化程序中调用其 map() 函数。例如,这是我自己的代码的摘录。

WO.RESTAdapter.map(App.Category, {
 resourceTypes: {
  embedded: 'load'
}
});
WO.RESTAdapter.map(App.Resource, {
 resourceType: {
  embedded: 'load'
 }
});
WO.RESTAdapter.map(App.Reservation, {
 resource: {
  embedded: 'load'
 },
 user: {
  embedded: 'load'
 }
});
App.serializer = App.WOSerializer.create();
App.store = DS.Store.create({
 revision: 10,
 adapter: WO.RESTAdapter.create({
  namespace: "cgi-bin/WebObjects/Reserve.woa/ra",
  serializer: App.serializer
 }),
 serializer: App.serializer,
 adapterForType: function(type){
  return this.get('adapter');
 }
});
于 2012-12-18T13:25:57.840 回答