如何使用Backbone.PageableCollection和自定义快速路由处理分页

whhtz7ly  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(120)

我正在编写一个应用程序,它使用一个名为LeanCloud的数据库。我已经设置了一个页面,可以在其中查看数据库中的所有用户,但LeanCloud被设置为每个请求只发送100条数据。
目前数据库中有853个用户,我可以更改设置,使每个请求发送1000条数据,但我觉得这将大大降低应用程序的速度,而且很有可能用户数量很快就会超过1000。
以下是我的快递 * 获取 * 路线:

router.get('/', function(req, res, next) {
    var query = new AV.Query(usersObject);
    var pageNumber = req.query.page
    var perPage = req.query.per_page
    query.limit(perPage)
    query.skip((perPage * pageNumber) - perPage)
    query.count(usersObject).then((userCount) => {
        query.find().then(function(userData) {
            res.json({
                userInfo: userData,
                pageInfo: {
                    userCount: userCount,
                    pageCount: Math.ceil(userCount / perPage),
                    currentPage: pageNumber
                }
            });
        });
    });
});

很明显,响应包含userInfopageInfo,我可以在/api/users?page=1&per_page=30中查看它们。为什么是查询字符串?这将我带到问题的下一部分。
我正在使用一个 Backbone.js 集合,经过一些研究,我发现backbone.paginator是一个可以分页的 Backbone.js 集合的替代品,这就是构建查询字符串的原因。

export var UserCollection = Backbone.PageableCollection.extend({
    model: UserModel,
    url: '/api/users',
    parse: function(response) {
        return response.userInfo
    },
    state: {
        firstPage: 1,
        pageSize: 30,
        totalPages: null,
        totalRecords: null

    },
})

在这个页面上,有一个表显示了statequeryParams,并说可以设置这些来适应我不完全理解的服务器API。
这里我应该尝试做什么?有没有方法可以将我的服务器响应中的值设置为queryParams中的值或backbone.paginator中的状态值?

w6mmgewl

w6mmgewl1#

并且说这些可以被设置为适应服务器API,我不完全理解。我应该在这里尝试做什么?
这是为那些集成到现有API的用户准备的。在你的例子中,API是快速路由,你正在开发它,所以你不必做任何查询参数Map。
假设您必须使用将firstPage理解为startingIndex的第三方API,在这种情况下,您需要执行以下操作:

queryParams: {
 firstPage: 'startingIndex'
}

是否有办法将服务器响应中的值设置为queryParams或state上的值
如获取数据和管理状态中所述,使用结构发送响应

[{ pagination state }, [{}, {} ...]]

将自动更新可分页集合的状态。如果响应包含另一个结构中的状态,则可以使用parseState(response){ return response.state; }方法从响应返回状态对象

相关问题