Невозможно реализовать 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');
}