Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript keystone.js:如何在索引页面上显示来自两种不同型号的内容_Javascript_Jquery_Node.js_Handlebars.js_Keystonejs - Fatal编程技术网

Javascript keystone.js:如何在索引页面上显示来自两种不同型号的内容

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

我正在与keystone.js合作一个项目。我用车把做模板(hbs) 我想做的是:在我的索引页面上,我想显示一个滑块(使用unslider.js解决了这个问题,所以我只需要能够显示滑块模型中的图像和文本)和3个最新事件(可以正常工作)。 以下是我目前的代码:

这是我的事件模型

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
函数中,它应该可以工作。我想,只要它还在工作,其实并不重要。