2015-08-21 72 views
1

的多個逆I有兩個數據模型EmberJS同一型號

// users 
export default DS.Model.extend({ 
    email: DS.attr(), 
    workspaces: DS.hasMany('workspace', { async: true }) 
}); 

// workspaces 
export default DS.Model.extend({ 
    title: DS.attr('string'), 
    owner: DS.belongsTo('user'), 
    contributors: DS.hasMany('user'), 
}); 

我希望這種邏輯:

1)user.workspaces包含所有工作空間即擁有+所有可以向。

2)workspace.contributors =>應獲得所有貢獻者

3)workspace.owner =>應該得到單一所有者。

Ember不會像目前定義的那樣工作,並且需要我正在努力做的明確的反向操作。

+0

恐怕是不可能的關係,看看這裏會導致什麼問題http://stackoverflow.com/q/31992024/2948109 –

+0

你可以從用戶中刪除工作區,並使用store.filter來獲取所有用戶的工作空間http://emberjs.com/api/data/classes/DS.Store.html#method_filter –

回答

2

這可以工作,你只需要修復你的數據模型了一下。

// user 
export default DS.Model.extend({ 
    email: DS.attr(), 
    workspacesOwning: DS.hasMany('workspace', { async: true, inverse: 'owner' }), 
    workspacesContributing: DS.hasMany('workspace', { async: true, inverse: 'contributors'}), 
    workspaces : Ember.computed.union('workspacesOwning', 'workspacesContributing') 
}); 

// workspace 
export default DS.Model.extend({ 
    title: DS.attr('string'), 
    owner: DS.belongsTo('user'), 
    contributors: DS.hasMany('user') 
}); 

然後:

//This would now work 
1) user.workspaces contains all workspaces that is owns + all can contribute to. 

//Will now work 
2) workspace.contributors => should get all contributors 

//Will now work 
3) workspace.owner => should get single owner. 

您可能需要連接表,以防止許多一對多workspacesContributing /貢獻者但這間是給你。

+0

非常感謝! @jax – Macchiatow