Sails.Js - 如何在sails.Js中进行分页?

23

我想使用sails.js、mongodb和waterline-ORM创建分页表格。

在sails.js中有没有特定的分页方法?

4个回答

34

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();即可。Waterline和Sails文档中有很多信息。

2
我编写了一些蓝图来帮助分页 https://github.com/randallmeeker/SailsBluePrintActions/tree/master/pagination - Meeker
2
我们如何在同一个查询中获取总数呢?因为我想告诉我的视图是否应该显示“下一页”按钮,并放置“页面”面包屑(如1、2、3、4、5)。 - Noitidart
@Meeker 干得好。请也将此作为答案添加进去。这对我非常有帮助。 - Iman Mohamadi

10

7
很棒...但是为了在前端生成一个可用的分页器,我需要将初始值传递给我的(angular)应用程序...所谓的初始值是指:项目的总数和每页显示的项目数(如果没有指定,则应该使用蓝图中的默认值)....获取这些值的正确模式是什么? - DS_web_developer

2
您可以使用蓝图路由内置的skiplimit查询参数来构建具有功能性的分页器:
/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,而不必再进行另一个查询来获取总数。 - Noitidart

0

我认为你也可以使用io来完成它:

io.socket.get('/thing', {limit: 30, skip: 30*pageNum}, function(things, jwr) { /*...*/ })

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接