1
私はthis質問がほぼ同じタイトルを持っているが、問題は異なっていることを知っています。翡翠のテンプレートがデータを受け取りません
最新のKeystone.jsリリースに組み込まれているJadeテンプレートエンジンv.1.11.0を使用しています。コントローラでは、2つのview.on( 'init')コールバックを使用してデータを照会します。最初のコールバックは1つのレコードのみを照会し、常に通過します。二番目は時々そうしない。私の見解では
var keystone = require('keystone');
var async = require('async');
exports = module.exports = function (req, res) {
var view = new keystone.View(req, res);
var locals = res.locals;
// Init locals
locals.section = 'category';
locals.filters = {
category: req.params.category
};
locals.data = {
sections: [],
category: {}
};
// Load current category
view.on('init', function (next) {
var q = keystone.list('Category').model.findOne({
key: locals.filters.category
});
q.exec(function (err, result) {
locals.data.category = result;
locals.section = locals.data.category.name.toLowerCase();
next(err);
});
});
// Load sections
view.on('init', function (next) {
var q = keystone.list('Section').model.find().where('category').in([locals.data.category]).sort('sortOrder').exec(function(err, results) {
if (err || !results.length) {
return next(err);
}
async.each(results, function(section, next) {
keystone.list('Article').model.find().where('section').in([section.id]).sort('sortOrder').exec(function(err, articles){
var s = section;
if (articles.length) {
s.articles = articles;
locals.data.sections.push(s);
} else {
locals.data.sections.push(s);
}
});
}, function(err) {
console.log(locals.data.sections);
});
next(err);
});
});
view.render('category');
};
category.jsは、私はいつもこれが渡される必要があります。
sections:
category: { _id: 574b8960947f45f034ac89b4, key: 'johndoe', sortOrder: 1, name: 'JohnDoe', __v: 0, image: {} }
: sections: { _id: 574b909b43ff68163ed86bf2, publicTitle: 'Title 1', key: 'name-1', sortOrder: 3, name: 'Name 1', __v: 0, category: 574b8960947f45f034ac89b4, text: '', image: {} }
category: { _id: 574b8960947f45f034ac89b4, key: 'blabla', sortOrder: 1, name: 'Blabla', __v: 0, image: {} }
しかし、時間の60%を、私はこれを取得
奇妙なことですが、別のカテゴリに行くとより多くセクションと30の記事のように、私はセクションの90%を取得しますが、まだそれらを10%を逃しています。これは開発と生産の両面で持続します。
「next()」の再生が早すぎますか?私はどこが乱れたのか分かりません。
1つのinitでクエリをネストしようとしてください。 – Darren
私は最初からやってみましたが、何らかの理由でページを永久にロードしてしまいました。また、2つのinitsを持つことは問題ではないようですが、このアプローチは、定型文でさえ、台形に広く使われています。 –
私はまた、次の(エラー)に移動するように勧められました。非同期コールバックでは、永久に読み込みが行われます。 –