使用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')

10-01 13:25