控制器中的Ember模型关系导航

时间:2016-01-07 10:15:11

标签: javascript ember.js ember-data

我需要在控制器内部浏览我的关系,并且没有想出如何做到这一点。我有以下型号。



// models/asset.js
export default DS.Model.extend({
  name: DS.attr('string'),
  type: DS.belongsTo('lookup', {inverse: null, async: true}),
  children: DS.hasMany('asset', {inverse: 'parent', async: true}),
  parent: DS.belongsTo('asset', {inverse: 'children', async: true})
});






// models/lookup.js
export default DS.Model.extend({
  value: DS.attr('string'),
  children: DS.hasMany('lookup', {inverse: 'parent', async: true}),
  parent: DS.belongsTo('lookup', {inverse: 'children', async: true})
});




我当前资产的类型基于父资产的子记录。 在控制器中的一个动作中,我需要获得当前资产的父母类型的孩子。我会喜欢来使用:



return this.store.findAll('lookup', this.get('asset.parent.type.children')).then(function(parentTypeChildren) {});




但生活并不那么容易。

如果我已加载资产并且this.get('asset.parent')我是否获得完整的资产记录或仅获得父资产ID?

关于此的任何提示?非常感谢所有帮助。

1 个答案:

答案 0 :(得分:0)

由于您有async: truethis.get('asset.parent')会触发服务器调用(如果它尚未存储在商店中)并获取父资产(作为set调用)并返回它是一种承诺。 this.get('asset.data.parent')将返回父级的ID。

所以基本上你应该尝试这样的事情(假设asset.parent.type已经在你的商店中):

var childrenLookUps = this.get('asset.parent.type.children');
childrenLookUps.then(function(){
    // do something with your childrenLookUps
});