我有一个可能不是那么独特的问题,有一个复杂的流星应用程序.
我有几个操作导致页面部分刷新,实际上不需要.但我无法找到哪个find()(或多个find())是被触发的那个.我知道有问题的收藏,而不是找到().
我可以在我使用的每个查找中使用observeChanges,但这将是很多额外的代码.
有没有一种简单的方法可以看到触发的内容和内容?
谢谢!
cma*_*her 19
这是一个您可能会觉得有用的渲染记录功能.它记录每个模板呈现给控制台的次数.您知道在初始页面加载后是否重新呈现模板,这是因为它所依赖的被动数据源已经发生了变化.可以使用辅助方法访问此活动数据源,或者模板是列表项(即{{#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);
};
});
}
Run Code Online (Sandbox Code Playgroud)
编辑:这是一种包装查找光标以将光标的所有更改记录到控制台的方法.我刚刚为此编写了一个类似的函数,用于我正在研究的一个叫做反应视觉的新软件包.希望很快就会发布.
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;
};
Run Code Online (Sandbox Code Playgroud)