如何对相关数据的请求进行分页?例如,如果我的人员有一千个任务模型,如果我执行以下操作,那么在RESTful思考中,我会得到所有这些模型。
var tasks = person.get('tasks');
这将是太多的数据。如何强制一些查询参数到幕后工作的请求?理想情况下,端点上有这样的东西附加到它的末尾。
?&offset=3&limit=3
以下是fiddle来说明我在IndexController
中要完成的工作。我不知道使用ember-data执行分页请求的“余烬方式”是什么。
答案 0 :(得分:10)
在第一次提出这个问题时它并不存在,但现在有一个名为 ember-data-has-many-query 的插件似乎能够做到这一点,至少在RESTAdapter
和JSONAPIAdapter
。由于余烬数据尚未支持作为一流概念的分页,它似乎有一些怪癖。如果这让您感到不安,则总是store.query
,但这确实需要您的API支持(在您的示例中)person_id
端点上的/tasks
过滤器参数。
相关:
(这个问题看起来不像JSON API,但讨论是相关的)
答案 1 :(得分:5)
今天仍然没有默认方式来处理ember中的分页。
首先,我们应该看看更简单的事情,findAll
请求的分页。
这可以通过.query({page:3})
之类的方式完成,但会导致一些问题:
对于第二个问题,我构建了一个挂钩到商店的小addon called ember-query-cache
,并允许您缓存查询结果。有一个非常简短的演示here。
现在,如果我们谈论一段关系,我会诚实地建议您使用顶级.query
,直到您从ember-data本身获得更好的支持:
store.query('task', { person: get(person, 'id'), page: 3 }
没有什么不好的。你得到你的结果,并在另一个方向上建立关系。只要你不需要缓存,它就可以毫不犹豫地进入任何数据,如果你需要缓存,那么我需要在我的插件中完成很少的黑客操作。
我们仍然希望ember-data完全成为JSONAPI,这需要分页。我认为从API角度来看,最好的办法是能够在关系返回的ManyArray上请求下一页和上一页。它将与JSONAPI一起提供下一个和上一个链接。但要说明一下,现在你必须深入挖掘ember-data,而不是在我在许多项目中成功使用的顶级.query
进行大的改进。
答案 2 :(得分:-2)
从Ember.js guides on using models,您还可以提交查询以及find()
来电。
this.store.find('person', { name: "Peter" }).then(function(people) {
console.log("Found " + people.get('length') + " people named Peter.");
});
从指南中:
传递给
find()
的搜索选项的哈希值对Ember是不透明的 数据。默认情况下,这些选项将作为发送到您的服务器 HTTPGET
请求的正文。使用此功能要求您的服务器知道如何解释 查询回复。