【问题标题】:Can't implement KeystoneJS Pagination concurrently无法同时实现 KeystoneJS 分页
【发布时间】:2017-04-11 20:21:26
【问题描述】:

我正在尝试在 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 集合应用不同的过滤器,并让它在一系列引导选项卡中运行,但我认为我需要先整理好基础知识。

有没有人遇到过类似的情况并找到了解决办法?

【问题讨论】:

    标签: javascript pagination keystonejs locals


    【解决方案1】:

    next 是一个在您的 Express 路由中运行的回调函数。您根本没有将它定义为您的路线中的参数;部分问题还在于您正在尝试同步加载数据,这在此处不起作用。

    使用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');
    }
    

    【讨论】:

    • 谢谢 - 成功了 - 对我来说,这是一个非常令人震惊的失误! 8-(当你点击分页时它的持续问题然后重定向到博客我已经追踪到模板/视图/帮助/索引.js-似乎我将不得不为每个实例编写一些特定的帮助程序分页,然后将它们匹配到特定的分页部分。我希望这不会有太大的问题,但由于这里是午夜,我从今天下午 3 点开始工作,这将不得不等待直到明天。
    猜你喜欢
    • 2014-12-11
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    • 2017-10-28
    • 1970-01-01
    • 1970-01-01
    • 2013-08-06
    相关资源
    最近更新 更多