1

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 ファイルをレンダリングすると、フォーカス部分が失われます。何が欠けていますか?データベースに保存できたので、リストモデルが存在します。

4

1 に答える 1

1

インクルードとは異なり、ミックスインは宣言後に呼び出す必要があります。それらは関数のようなものです。

ここのドキュメントを参照してください: 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 に答える