2014-11-02 76 views
1

我很努力地理解Ember Data(Beta 11)中的多態關係如何蠕蟲,並且無法找到有關如何設置它們的更新信息以及JSON有效負載中的預期內容。我正在嘗試創建項目的訂閱源(認爲Facebook訂閱源),其中在訂閱源中有不同類型的項目。我的模型看起來如下所示。Ember Data中的HasMany多態關係

App.Feedable = DS.Model.extend({ 
activities: DS.hasMany('activity') 
}); 

App.Activity = DS.Model.extend({ 
feedable: DS.belongsTo('feedable', { polymorphic: true, async: false }) 
}); 

App.MemberLikeShare = DS.Model.extend({ 
status: DS.attr('string') 
}); 

App.PhotoShare = DS.Model.extend({ 
status: DS.attr('string'), 
photo: DS.attr('string') 
}); 

當我做了取在/activities我發回JSON,看起來像下面這樣:

{ 
    activities: [ 
    { 
     id: 1, 
     feedable: { id: 1, type: 'memberLikeShare' } 
    }, 
    { 
    id: 4, 
    feedable: { id: 4, type: 'memberLikeShare' } 
    }, 
    { 
     id: 5, 
     feedable: { id: 5, type: 'photoShare' } 
    } 
    ], 

    member_like_shares: [ 
    { 
     id: 1, 
     status: 'Foo' 
    }, 
    { 
    id: 4, 
    status: 'Bar' 
    } 
    ], 
    photo_shares: [ 
    {id: 5, photo: 'example.jpg'} 
    ] 
} 

在運行此我得到這樣一個錯誤:

You can only add a 'feedable' record to this relationship Error: Assertion Failed: You can only add a 'feedable' record to this relationship 

我假設我的關係錯了,或者我發錯了JSON?

回答

0

多態關係應該擴展基類型。

App.Feedable = DS.Model.extend({ 
activities: DS.hasMany('activity') 
}); 

App.MemberLikeShare = App.Feedable.extend({ 
status: DS.attr('string') 
}); 

App.PhotoShare = App.Feedable.extend({ 
status: DS.attr('string'), 
photo: DS.attr('string') 
}); 

我也希望他們能夠定義他們的活動。

member_like_shares: [ 
    { 
     id: 1, 
     status: 'Foo', 
     activites: [1,2,3,4] 
    }, 
    { 
    id: 4, 
    status: 'Bar', 
     activites: [1,2,3,4] 
    } 
    ], 
    photo_shares: [ 
    { 
     id: 5, 
     photo: 'example.jpg', 
     activites: [1,2,3,4] 
    } 
    ] 
+0

您是否必須使用ActiveModelAdapter來完成這項工作,或者您能否使用RESTAdapter? – Chad 2014-11-02 18:50:04

+0

沒關係。如果有人正在尋找一個工作示例,這裏是一個JSBin。 http://emberjs.jsbin.com/jipomodugo/1/edit – Chad 2014-11-02 18:56:25

相關問題