添加创建mixin并使用它keystonejs

Adding creating a mixin and using it keystonejs

本文关键字:keystonejs 创建 mixin 添加      更新时间:2023-09-26

我正在尝试为keystonejs创建一个jade mixin,这是我在我的index.jade上想出的

extends ../layouts/default
block bodycontent
    include ../mixins/focus.jade

和混心玉文件

mixin focus(focus)
  section#focus.focus
    div.container
          div.service-icon= focus.image

这是javascript视图文件

var keystone = require('keystone'),
 Focus = keystone.list('Focus');
exports = module.exports = function(req, res) {
        var view = new keystone.View(req, res),
            locals = res.locals;
        // Set locals
        locals.section = 'focus';
        locals.data = {
        };
        view.on('init', function(next) {
                Focus.model.find()
                    .populate('author')
                    .sort('label')
                    .limit(4)
                    .exec(function(err, fields) {
                        // do something with posts
                        locals.data.fields = fields;
                        console.log(fields);
                        next(err);
                    });
        });
        view.render('focus');
};

当我渲染 index.jade 文件时,焦点部分丢失了。我错过了什么?列表模型存在,因为我能够将其保存到数据库中。

与包含不同,您需要在声明它们后调用 mixins。它们就像函数。

请参阅此处的文档:http://jade-lang.com/reference/mixins/

然后,假设locals中有一些数据定义了要关注的内容,您将首先包含定义 mixin 的文件,然后调用 mixin 并向其传递要呈现的数据。

我有点猜测,因为我看不到您的整个项目结构,但像这样的东西可能是您所追求的:

路由处理程序

var keystone = require('keystone'),
    Focus = keystone.list('Focus');
exports = module.exports = function(req, res) {
    var view = new keystone.View(req, res),
        locals = res.locals;
    locals.section = 'focus';
    locals.data = {};
    view.on('init', function(next) {
            Focus.model.find()
                .populate('author')
                .sort('label')
                .limit(4)
                .exec(function(err, results) {
                    locals.data.results = results;
                    next(err);
                });
    });
    view.render('focus');
};

混合素

mixin focus(focus)
    section#focus.focus
        div.container
            div.service-icon= focus.image

模板

extends ../layouts/default
block bodycontent
    include ../mixins/focus.jade
    each i in data.results
        +focus(i)