Sails.Js - 我如何在sails.Js 中进行分页
Posted
技术标签:
【中文标题】Sails.Js - 我如何在sails.Js 中进行分页【英文标题】:Sails.Js - How I do pagination in sails.Js 【发布时间】:2014-12-26 04:51:49 【问题描述】:我想使用sails.js、mongodb 和waterline-ORM 创建分页表。
sails.js 中是否有特定的分页方式?
【问题讨论】:
【参考方案1】:http://sailsjs.org/#/documentation/concepts/ORM/Querylanguage.html
Model.find().paginate(page: 2, limit: 10);
Model.find( where: name: 'foo' , limit: 10, skip: 10 );
如果您希望分页异步工作,使用 JQUERY $$.getJSON
和服务器上的 res.json();
非常容易
水线和船帆文档中有很多信息。
【讨论】:
我写了一些蓝图来帮助分页github.com/randallmeeker/SailsBluePrintActions/tree/master/… 我们如何在同一个查询中获得总数?因为我想告诉我的视图是否应该显示“下一个按钮”,并放置“页面”碎屑(如 1、2、3、4、5) @Meeker 干得好。也请将此添加为答案。这对我很有帮助。【参考方案2】:还有另一种方式。
如果你想从前端获取数据,并且已经开启了蓝图,你也可以试试: http://yourDomain.com/ModelName?skip=10&limit=10
参考: 1.官网:http://sailsjs.org/#/documentation/reference/blueprint-api/Find.html
【讨论】:
太棒了...但是为了在前面生成一个功能性分页器,我需要将初始值传递给我的(角度)应用程序...我的意思是初始值:项目总数和 items_per_page (如果没有指定,它应该是蓝图中的默认页面)......获取这些的正确模式是什么?【参考方案3】:您可以使用内置的 skip
和 limit
查询参数构建一个功能性分页器,用于蓝图路由:
/api/todos?skip=10&limit=10
使用此选项,您可以根据各种设备大小动态调整页面大小 - 您可以使用 limit
提供此选项,这基本上就是您的页面大小。将(页面大小 - 1)乘以当前页码 - 瞧,你已经得到了 skip
参数。
至于如何获取所有项目的数量,我还没有找到内置的方法,所以我写了一个小助手中间件(https://github.com/xtrinch/sails-pagination-middleware)来返回响应中的总数JSON 这种方式:
"results": [
/* result here */
,
/* another result here */
],
"totalCount": 80
您需要做的就是通过 npm 安装中间件并将其添加到 http.js
中的中间件中。
如果您需要一个功能齐全的示例,我还在 github 上提供了一个具有这种分页功能的示例待办事项应用程序:https://github.com/xtrinch/vue-sails-todo。它是用 vue 编写的,但无论哪种情况你都应该明白。
请注意,此答案需要sails 1.x。
【讨论】:
这在返回总数方面非常出色。我看看你是怎么做到的。理想情况下,我想在同一个查询中获取 totalCount,而不必执行另一个查询来获取总数。【参考方案4】:我想你也可以用 io 做到这一点:
io.socket.get('/thing', limit: 30, skip: 30*pageNum, function(things, jwr) /*...*/ )
【讨论】:
以上是关于Sails.Js - 我如何在sails.Js 中进行分页的主要内容,如果未能解决你的问题,请参考以下文章
Sails js:如何在 Sails js 的单个模型中定义两个 MySQL 连接到两个不同的数据库?