添加创build一个mixin并使用它keystonejs

我正在尝试为keystonejs创build一个jQuery mixin,这里是我在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文件时,焦点部分丢失。 我错过了什么? 列表模型存在,因为我可以将其保存到数据库中。

与includes不同,你需要在声明之后调用mixins。 他们就像function。

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

然后,假设locals中有一些数据定义了要重点关注的内容,首先将文件包含在定义了混合的地方,然后调用混合并将数据传递给渲染。

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

路由处理器

 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)