2016-09-22 45 views
0

(恩伯2,如果它的事项)如何处理部分API数据的列表烬

我试图表现出余烬页面上的搜索结果列表。我使用的api基本上只返回一个特定记录类型的id和名称列表(我们称之为foo)。不幸的是,我还需要为每个项目获取缩略图,并且搜索结果路线不提供它。搜索结果模型由多个属性的列表组成,每个属性对于不同的模型简单地是DS.hasMany

foos: DS.hasMany('foo', { 
    async: true 
    }), 
    bars: DS.hasMany('bar', { 
    async: true 
    }), 

的数据从服务器返回的是这样的:

{ 
    "actions": [{ 
     ... irrelevant 
    }], 
    "data": { 
     "foos": [{ 
      "id": "test", 
      "name": "test" 
     }], 
     "meta": { 
      "total": 1 
     } 
    } 
} 

Foo的模型有很多属性,包括namethumbnailURI

当我尝试用{{foo.image}}我模板,属性是未定义的;我本来预计该商店将获取foo/test的模型,因为它缺少图片属性,但它没有。我该怎么做才能告诉Ember - 嘿,服务器上的物品列表并没有得到你需要的所有属性;通过/api/foo/test,/api/foo/test2等问服务器的每个项目的数据。

回答

2

ember-data是不适合用分区加载模型。最好的方法是将你的模型分成两部分。一个normal模型和一个detail模型。

然后你可以在你的适配器/序列化程序中解决这个问题。 通常其并不清楚适配器/对你使用,但是让我们假设你有模型foofoo-detail

name: DS.attr('string'), 
detail: DS.belongsTo('foo-detail'), 
bars: DS.hasMany('bar'), 

富细节

image: DS.attr('string'), 

然后你的序列化器foo将不得不返回像这样的东西:

{ 
    data: [{ 
     id: 'test', 
     type: 'foo', 
     attributes: { 
      name: 'first foo' 
     }, 
     relationships: { 
      "foo-detail": { 
       links: { 
        related: '/foo/test' 
       } 
      } 
     } 
    },{...}] 
} 

当您访问{{fooInstance.detail.image}}时,这将强制请求/foo/test。接下来你必须确保foo-detail的序列化程序将返回这个结果:

{ 
    data: { 
     id: 'test', 
     type: 'foo-detail', 
     attributes: { 
      image: '/testimage.jpg' 
     } 
    } 
} 
+0

心灵只是在你的最后一句话上详述一下吗?我是新来的,仍然静谧。我知道这些是什么,但我不能立即确定你认为的一般步骤是什么。 – AlexMA

+0

@AlexMA我编辑了答案。 – Lux

+0

谢谢,这应该对我和其他人有帮助。 – AlexMA

相关问题