【问题标题】:Adding creating a mixin and using it keystonejs添加创建 mixin 并使用它 keystonejs
【发布时间】:2014-12-27 18:46:07
【问题描述】:

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

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

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

【问题讨论】:

    标签: javascript node.js keystonejs


    【解决方案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)
    

    【讨论】:

    • 谢谢,我查看了 keystone 演示并能够解决它。顺便说一句,你的 cms 很棒。
    • 很高兴你知道了。谢谢:D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-30
    • 2015-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多