ここで便利なレンダリングログ機能があります。各テンプレートがレンダリングされる回数をコンソールに記録します。最初のページが読み込まれた後にテンプレートが再レンダリングされるかどうかは、依存する反応的なデータソースが変更されたためです。この反応的なデータソースがヘルパーメソッドでアクセスされたか、またはテンプレートがリストアイテム(つまり、{{#each ...}}
ブロックヘルパー内)であり、リスト項目が追加/移動/削除/変更された可能性があります。また、子テンプレートは、子がレンダリングまたは再レンダリングされたときに親のレンダリングされたコールバックを呼び出すことに注意してください。したがって、親が実際にDOMから離脱して戻ってきたと考えることに混乱するかもしれませんが、それは真実ではありません。
function logRenders() {
_.each(Template, function (template, name) {
var oldRender = template.rendered;
var counter = 0;
template.rendered = function() {
console.log(name, "render count: ", ++counter);
oldRender && oldRender.apply(this, arguments);
};
});
}
EDIT:
だから、あなたは、レンダリングカウントを見るためにあなたのクライアントコードの最後にこの関数を呼び出すことができます。ここにすべての変更をログに記録する検索カーソルをラップする方法がありますコンソールにカーソルを合わせます。私はちょうど私が反応型ビジョンと呼ばれる新しいパッケージのためにこれに似た機能を書いた。うまくいけばすぐにリリースされました。
var wrappedFind = Meteor.Collection.prototype.find;
Meteor.Collection.prototype.find = function() {
var cursor = wrappedFind.apply(this, arguments);
var collectionName = this._name;
cursor.observeChanges({
added: function (id, fields) {
console.log(collectionName, 'added', id, fields);
},
changed: function (id, fields) {
console.log(collectionName, 'changed', id, fields);
},
movedBefore: function (id, before) {
console.log(collectionName, 'movedBefore', id, before);
},
removed: function (id) {
console.log(collectionName, 'removed', id);
}
});
return cursor;
};
クールの
Meteor 1.3
適応し、より高度なバージョンで、これは非常に便利です。どのヘルパーが実際にテンプレートの再構築を生成したかを確認する方法はありますか? – Ricochet私の全体的な質問は、世界中のobserveChangesのようなものをオンにする方法があるかもしれないと思いますか?それぞれの検索で設定する必要はありません。 – Ricochet
私はそれを行う方法について考える必要があります。あなたは創造的になる必要があります。 – cmather