Ember数据:使用非id字段的side-loading hasMany关系

时间:2014-12-02 02:24:01

标签: ember.js ember-data django-rest-framework

我想知道你是否可以在ember-data中加载一个hasMany关系 - 挂在非id列上。这是我的代码片段 -

App.Profile = DS.Model.extend({
    firstName: DS.attr(),
    lastName: DS.attr(),
    photo: DS.hasMany('photo', {async:true})
});

App.Photo = DS.Model.extend({
    path: DS.attr('string'),
    title: DS.attr('string'),
    owner: DS.belongsTo('user', {async:true}),
});


App.ProfileSerializer = DS.RESTSerializer.extend({
    attrs:{
        photo: {embedded: 'load'}
    },
});

localhost:/ api / profiles /返回的JSON是:

[
    {
        "photos": [
            "media/pic3.jpeg", 
            "media/pic4.jpeg"
        ], 
        "id": "5441b6b2bc8ae304d4e6c10e", 
        "first_name": "Dave", 
        "last_name": "Gordon", 
        "profile_pic": "media/profilePic.jpg", 
        "member_since": "2014-01-03T00:00:00", 
        "membership": "Silver", 
        "theme_pic": "media/profilePic.jpg"
    }
]

正如我们在此处看到的,我正在尝试使用photo而不是id张照片的“路径”字段来连接照片。我似乎无法让ember发送异步调用。是否有可能告诉ember根据非id字段进行异步调用。我觉得应该有一种方法因为我打算根据自定义生成的密钥发送异步调用。任何帮助是极大的赞赏。谢谢

1 个答案:

答案 0 :(得分:0)

我不认为这是一个关联,而只是另一个具有数组类型的属性。

你应该能够像这样改变你的模型:

App.Profile = DS.Model.extend({
    firstName: DS.attr(),
    lastName: DS.attr(),
    photos: DS.attr()
});

然后,您应该能够在模板中以数组(可能的对象)的形式访问该属性。

如有必要,您可能需要创建如下自定义转换:

App.ArrayTransform = DS.Transform.extend({
    deserialize:function(value) {
       return value;
    }
});

然后你可以这样做:

App.Profile = DS.Model.extend({
    firstName: DS.attr(),
    lastName: DS.attr(),
    photos: DS.attr('array')
});