1

我正在尝试为 keystonejs 创建一个玉混合,这是我在 index.jade 上提出的

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

和 mixin 玉文件

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 文件时,缺少焦点部分。我错过了什么?列表模型存在,因为我能够将其保存到数据库中。

4

1 回答 1

1

与包含不同,您需要在声明它们之后调用 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)
于 2014-12-27T10:46:07.560 回答