2017-04-10 48 views
1

我对Ember有点新,所以请原谅我,如果这个问题说明我对框架的普遍缺乏理解。Ember hasMany与多个模型

基本上我试图使用Contentful与Em​​ber。我发现这个插件,这似乎使这非常简单https://github.com/davidpett/ember-data-contentful

但是,我遇到了一个问题,开始让我非常沮丧。我有一个内容类型,它有一个“多引用”字段,它允许用户引用多种不同的内容类型。基本上,我有一个“模块”字段,它将是由几个不同模块组成的数组。每个模块基本上都是它自己的模型。

在余烬

modules: hasMany('module')

但是module可以是许多不同的模式中的一个,假设需要有对应于每个内容类型的模型。

我已经在这里问过一个问题:https://github.com/davidpett/ember-data-contentful/issues/24,但一直未能完成此工作。

回答

2

要解决这个问题,您需要让每个模型都从实现Contentful系统元数据属性的基础模型继承。它们在json响应中的sys属性中找到。

然后,您可以根据基础模型的内容类型将该基础模型扩展到与该内容类型对应的特定模型。

我意识到您正在尝试在您发布的问题主题中做类似的事情。我认为你遇到的问题是你的基类没有contentType属性。

+0

谢谢!问题是模块扩展的基本模型有一个名为'contentType'的属性: -/https://github.com/davidpett/ember-data-contentful/blob/master/addon/models/contentful.js – morrisbret

+0

我明白了,这是如何填充的?我猜是有一个适配器将sys.contentType.sys.id属性放在那里? – Robban

+0

这是正确的Robban也许是这样的:https:// github。com/davidpett/ember-data-contentful/blob/master/addon/adapters/contentful.js – morrisbret

0

嗯,我不知道内容丰富。

我的团队做用计算请求特定的模型手动解决这种动态类型。由于我们没有找到更好的方法来使hasMany中的多个模型支持ember-data。它运作得非常好。
但是对于批量查询,您可能需要实施批量请求折叠技术以提高性能。

另一个想法是,将hasMany替换为DS.attr()作为无类型。并尝试是否可以推送Payload并查看这些“模块”,并将模块模型手动匹配到适配器中的model.modules。这可能不起作用或仅适用于GET请求。
或者只是将这些有效内容模型名称/ ID与您的model.modules进行匹配,并使用计算来查看正确的记录并挂载到模型。

+0

您可以提供一段代码,您可以使用计算来手动请求特定模型吗?不知道如何去做这件事。谢谢! – morrisbret

0

原来有一个与ember-data-contentful lib有关的问题。降级到版本0.2.1现在解决了这个问题。作者意识到这个错误并正在寻找未来版本中的修复程序。谢谢大家的帮助!