使用Ember 1.13.6和Ember Data 1.13.7,我想知道如何在不调用服务器(关系是异步的)的情况下从存储中获取已经加载的对象。
图片如下模型:
//page model
export default DS.Model.extend({
parent: DS.belongsTo('page', { async: false, inverse: 'subpages'}),
subpages: DS.hasMany('page',{ async: true, inverse: 'parent' }),
});
如果仅调用
model.get('subpages')
,则Ember Data将返回一个Promise +对该服务器进行调用。通常,这是很好的行为,但是现在我有一个特殊情况,我只想获取已经加载的对象。我在文档中找不到有关这种情况的任何信息。我目前发现的唯一方法是使用私有属性:
model._internalModel._relationships.initializedRelationships.subpages.canonicalState
当然,我在不触及Ember Data的内部代码的情况下寻求一种正常的方法。有人知道如何实现这一目标吗?
最佳答案
我认为您不能直接从人际关系中做到这一点,但可以窥视一下。
this.store.peekAll('page')
不会调用后端。您可能使用过滤器,它们不会打到后端:
existingSubpages: function(){
return this.store.filter('page', item => {
return item.parent === this;
});
}.property('subpages.@each')