简体   繁体   English

我应将javaScript函数放在哪里?

[英]Where should i put javaScript function in node?

I have simple function for pagination that makes output. 我有简单的分页功能,可以输出。
1 ... 6 7 8 9 ... 21
Arguments that these function need to calculate result is current number of page and total number of pages. 这些函数需要计算结果的参数是当前页数和总页数。

But i cant put it in my view (handlebars) because {{each pageArray}} need data comming from backend if i am right. 但是我不能将其放在我的视图(把手)中,因为如果我是对的, {{each pageArray}}需要从后端来的数据。

But i cant put it in my route.js because at the moment of function call i dont know number of pages or current number. 但是我不能将其放在我的route.js中,因为在函数调用时,我不知道页面数或当前数。 It works only if i pass fake data like total pages = 100 and current page = 5 仅当我传递虚假数据(例如总页数= 100,当前页= 5)时,此方法才有效

I dont know how to make it works. 我不知道如何使它工作。 I dont understand how express-paginate works for example they done it somehow... 我不明白特快专页的工作原理,例如他们以某种方式做到了...

My route.js 我的route.js

// View users
router.get("/show/:page", function (req, res, next) {
    var perPage = 1
    var page = req.params.page || 1

    User
        .find({})
        .skip((perPage * page) - perPage)
        .limit(perPage)
        .exec(function (err, users) {
            User.countDocuments().exec(function (err, count) {
                if (err) return next(err)
                res.render('../core/modules/users/views/userList', {
                    layout: "cmsLayout",
                    users: users,
                    current: page,
                    pages: Math.ceil(count / perPage),
                    helpers,
                    pagesArr: Array.from(Array(((Math.ceil(count / perPage)))).keys()).map(i => 1 + i),
                    pageArray: pagination


                })
            })
        })
});

My pagination function 我的分页功能

function pagination(currentPage, nrOfPages) {
    var delta = 2,
        range = [],
        rangeWithDots = [],
        l;

    range.push(1);

    if (nrOfPages <= 1) {
        return range;
    }

    for (let i = currentPage - delta; i <= currentPage + delta; i++) {
        if (i < nrOfPages && i > 1) {
            range.push(i);
        }
    }
    range.push(nrOfPages);

    for (let i of range) {
        if (l) {
            if (i - l === 2) {
                rangeWithDots.push(l + 1);
            } else if (i - l !== 1) {
                rangeWithDots.push('...');
            }
        }
        rangeWithDots.push(i);
        l = i;
    }

    return rangeWithDots;
}

Solved by changing 通过改变解决

pagination: pagination(current, pages)

to

pagination: pagination(page, (Math.ceil(count / perPage)))

Thanks to @iagowp for solution. 感谢@iagowp提供解决方案。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM