无法同时实现 KeystoneJS 分页
Can't implement KeystoneJS Pagination concurrently
我正在尝试在 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 is not defined"
一些提示和可能的原因。我已经使用以下方法在单独的页面上为博客帖子设置了分页:
locals.data = {
test: []
};
如果我注释掉 "next(err)",则会出现分页按钮,但单击箭头会将我带到 blog/news 项的第二页。
这里的某处显然有些混乱。我怀疑这是因为我对当地人处理不当,但我似乎无法在 keystone 网站上找到任何关于当地人应该如何工作的深入解释。
我最终想对 mongo 集合应用不同的过滤器,并将其 运行 放在一系列 bootstrap 选项卡中,但我认为我需要先整理好基础知识.
有没有人遇到过类似的情况并且能够找到解决方案?
next
是在您的 Express 路由中运行的回调函数。您根本没有将它定义为路线中的参数;部分问题还在于您正在尝试同步加载数据,这在此处不起作用。
使用 view.init
函数公开 next
函数,然后在将信息从数据库加载到 locals.data
后调用它。
route/view
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');
}
我正在尝试在 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 is not defined"
一些提示和可能的原因。我已经使用以下方法在单独的页面上为博客帖子设置了分页:
locals.data = {
test: []
};
如果我注释掉 "next(err)",则会出现分页按钮,但单击箭头会将我带到 blog/news 项的第二页。
这里的某处显然有些混乱。我怀疑这是因为我对当地人处理不当,但我似乎无法在 keystone 网站上找到任何关于当地人应该如何工作的深入解释。
我最终想对 mongo 集合应用不同的过滤器,并将其 运行 放在一系列 bootstrap 选项卡中,但我认为我需要先整理好基础知识.
有没有人遇到过类似的情况并且能够找到解决方案?
next
是在您的 Express 路由中运行的回调函数。您根本没有将它定义为路线中的参数;部分问题还在于您正在尝试同步加载数据,这在此处不起作用。
使用 view.init
函数公开 next
函数,然后在将信息从数据库加载到 locals.data
后调用它。
route/view
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');
}