Javascript keystone.js:如何在索引页面上显示来自两种不同型号的内容
我正在与keystone.js合作一个项目。我用车把做模板(hbs) 我想做的是:在我的索引页面上,我想显示一个滑块(使用unslider.js解决了这个问题,所以我只需要能够显示滑块模型中的图像和文本)和3个最新事件(可以正常工作)。 以下是我目前的代码: 这是我的事件模型Javascript keystone.js:如何在索引页面上显示来自两种不同型号的内容,javascript,jquery,node.js,handlebars.js,keystonejs,Javascript,Jquery,Node.js,Handlebars.js,Keystonejs,我正在与keystone.js合作一个项目。我用车把做模板(hbs) 我想做的是:在我的索引页面上,我想显示一个滑块(使用unslider.js解决了这个问题,所以我只需要能够显示滑块模型中的图像和文本)和3个最新事件(可以正常工作)。 以下是我目前的代码: 这是我的事件模型 var keystone = require('keystone'); var Types = keystone.Field.Types; /** * Event Model * ========== */ va
var keystone = require('keystone');
var Types = keystone.Field.Types;
/**
* Event Model
* ==========
*/
var Event = new keystone.List('Event', {
map: { name: 'title' },
autokey: { path: 'slug', from: 'title', unique: true },
});
Event.add({
title: { type: String, required: true },
state: { type: Types.Select, options: 'draft, published, archived', default: 'draft', index: true },
author: { type: Types.Relationship, ref: 'User', index: true },
publishedDate: { type: Types.Date, index: true, dependsOn: { state: 'published' } },
image: { type: Types.CloudinaryImage },
content: {
brief: { type: Types.Html, wysiwyg: true, height: 150 },
extended: { type: Types.Html, wysiwyg: true, height: 400 },
},
eventcategories: { type: Types.Relationship, ref: 'EventCategory', many: true },
});
Event.schema.virtual('content.full').get(function () {
return this.content.extended || this.content.brief;
});
Event.defaultColumns = 'title, state|20%, author|20%, publishedDate|20%';
Event.register();
这是我的滑块模型
var keystone = require('keystone');
var Types = keystone.Field.Types;
/**
* slider Model
* ==========
*/
var Slider = new keystone.List('Slider', {
map: { name: 'title' },
autokey: { path: 'slug', from: 'title', unique: true },
});
Slider.add({
title: { type: String, required: true },
image: { type: Types.CloudinaryImage },
});
Slider.register();
这两个模型在后端都能正常工作,这应该只是视图中的一个问题。。。所以这里是索引视图
var keystone = require('keystone');
exports = module.exports = function (req, res) {
var view = new keystone.View(req, res);
var locals = res.locals;
// Init locals
locals.section = 'eventblog';
locals.filters = {
eventcategory: req.params.category,
};
// Set locals
locals.section = 'slider';
locals.data = {
titles: [], //maybe this is a problem?
images: [], //maybe this is a problem?
events: [],
eventcategories: [],
}
// locals.section is used to set the currently selected
// item in the header navigation.
locals.section = 'home';
view.on('init', function (next) {
var q = keystone.list('Event').paginate({
page: req.query.page || 1,
perPage: 3,
maxPages: 1,
filters: {
state: 'published',
},
})
.sort('-publishedDate')
.populate('author categories');
if (locals.data.eventcategory) {
q.where('categories').in([locals.data.eventcategory]);
}
q.exec(function (err, results) {
locals.data.events = results;
next(err);
});
});
// Render the view
view.render('index');
};
这是我的索引
<div class="container">
<div class="my-slider">
<ul>
{{#each slider}}
<!-- doesn't loop even once-->
<li>
<img src="{{cloudinaryUrl image width='300' height='300'}}" >
<p>{{title}}</p>
</li>
{{/each}}
</ul>
</div>
<!-- the code below works correctly -->
<div class="events row">
{{# each data.events.results}}
<div class="col-md-4 col-lg-4">
<h3><a href="{{eventUrl slug}}">{{{title}}}</a></h3>
<p class=" text-muted">{{{categoryList categories prefix="Posted in "}}}
{{#if author.name.first}}by {{author.name.first}}{{/if}}
</p>
{{#if image}}<img src="{{{cloudinaryUrl image height=160 crop='fit' }}}" class="img center-block">{{/if}}
<p>{{{content.brief}}}</p>
{{#if content.extended}}<p class="read-more"><a href="{{eventUrl slug}}">Read more...</a></p>{{/if}}
</div>
{{/each}}
</div>
</div>
{{{#每个滑块}}
-
{{title}}
{{/每个}}
{{{#each data.events.results}
{{{{categoryList categories prefix=“Posted in”}}
{{{if author.name.first}}{{author.name.first}}{{/if}}
{{{#if image}{{/if}}
{{{content.brief}}}
{{{if content.extended}{/if}
{{/每个}}
我真的希望我的问题很清楚,有人能帮助我你路线中的代码集
locals.data.events
,这就是为什么你可以在车把上使用它。但是,您没有设置locals.slider
,这就是为什么{{{each slider}}
循环不执行的原因
在你的路线上,你还需要做一些事情,比如
keystone.list('Slider').model.find().exec(function (err, results) {
locals.sliders = restuls;
next(err);
}
它填充locals.slider
,以便在中您可以在hbs模板中执行{{{each slider}}
。剩下的代码应该可以正常工作
(免责声明,我还没有实际测试过它,但它应该可以工作。如果没有,请尝试了解发生了什么。中有大量此类代码的示例)谢谢您的提示。我忘记装了。它不适用于您的代码,但它是view.query('sliders',keystone.list('Slider').model.find().sort('sortOrder');在index.js(routes/views/index.js)啊,我想如果你只是把它贴在
view.on
bit的末尾,我的可能不起作用,因为你在填充事件后调用next()
。如果将If置于下一个(err)之前
在您的q.exec
函数中,它应该可以工作。我想,只要它还在工作,其实并不重要。