Невозможно реализовать KeystoneJS Pagination одновременно

Я пытаюсь реализовать нумерацию страниц в Keystone JS и если я делаю это следующим образом:

модель

var keystone = require('keystone');
var Types = keystone.Field.Types;

var Test = new keystone.List('Test', {
    map: {name: 'title'},
    label: 'Test',
    singular: 'Test',
    plural: 'Tests',
    autokey: {path: 'slug', from: 'title', unique: true} 
});

Test.add({
    description: {type: Types.Html, wysiwyg: true, height: 300 }
});

Test.register();

Маршрут / Просмотр

var keystone = require('keystone');
var Test = keystone.list('Test');
exports = module.exports = function(req, res) {

    var view = new keystone.View(req, res);
    var locals = res.locals;

    // Set locals
    locals.section = 'test';
    locals.data = {
        test: []
    };


    Test.paginate({
        page: req.query.page || 1,
        perPage: 2,
        maxPages: 5
    })
    .exec(function(err, results) {
        locals.data.test = results;
        next(err);
    });

    // Load All Terms
    view.query('test', keystone.list('Test').model.find()); 

    // Render view
    view.render('test');
}

В Index.js

app.all('/test', routes.views.test);

В middleware.js

res.locals.navLinksFooter = [
    { label: 'Test', key: 'test', href: '/test' },
    .....
];

шаблон

 <div class="row">
    <div class="col-xs-12">
        <span class="pull-right">
            {{>pagination}}
        </span>
    </div>
</div>

<div class="row row-content panel--outer panel--outer--trans">
    <div class="col-xs-12" id="panel--news-detail">
        {{# each test}}
            <p>{{{description}}}</p>
        {{/each}}
    </div>
</div>

К сожалению, когда я пытаюсь перейти на страницу, я получаю следующую ошибку:

"ReferenceError: next не определено"

Некоторые указатели и возможные причины. Я уже настроил разбиение на страницы для сообщений в блоге на отдельной странице, используя:

locals.data = {
    test: []
};

Если я закомментирую "next(err)"), появятся кнопки разбиения на страницы, но щелчок мышью по стрелке приведет меня на вторую страницу блога / новостей.

Здесь явно что-то путается. Я подозреваю, что это из-за моего плохого обращения с местными жителями, но я не могу найти какого-либо подробного объяснения того, как местные жители должны работать.

В конечном счете, я хочу применить различные фильтры к коллекции mongo и запустить ее в виде серии вкладок начальной загрузки, но я думаю, что сначала мне нужно разобраться с основами.

Кто-нибудь сталкивался с подобной ситуацией и смог найти решение?

1 ответ

Решение

next является функцией обратного вызова, которая выполняется в вашем экспресс-маршруте. Вы вообще не определили это как аргумент в вашем маршруте; Часть проблемы также в том, что вы пытаетесь загрузить данные синхронно, что здесь не работает.

Использовать view.init функция выставить next функцию, а затем вызвать ее, когда вы загрузили информацию из базы данных в locals.data,

Маршрут / вид

var keystone = require('keystone');
var Test = keystone.list('Test');
exports = module.exports = function(req, res) {

    var view = new keystone.View(req, res);
    var locals = res.locals;

    // Set locals
    locals.section = 'test';
    locals.data = {
        test: []
    };


    view.on('init', function (next) {
        Test.paginate({
            page: req.query.page || 1,
            perPage: 2,
            maxPages: 5
        })
        .exec(function(err, results) {
            locals.data.test = results;
            next(err);
        });
    });

    // Load All Terms
    view.query('test', keystone.list('Test').model.find()); 

    // Render view
    view.render('test');
}
Другие вопросы по тегам