http://docs.meteor.com/#meteor_startup
关于Meteor.startup(func)
在客户端上,只要DOM准备好,该函数就会立即运行。
“DOM准备好”到底是什么时候?
我问的原因是因为你可以在其中使用许多其他模板(即其他DOM元素)的Meteor模板,并且在不同时间加载许多其他东西,具体取决于加载所需的时间(即。更多DOM元素。)
过去我在Meteor.startup上加载了Javascript文件,但它们仍然过早加载,因为整个DOM实际上还没有加载。
Meteor.startup( function() {
//load JS files now
});
那么“DOM准备好了”是什么意思?它绝对不是指“当DOM完全加载时。”
答案 0 :(得分:2)
当所有文件都已从服务器(javascript文件)中完全下载时,Meteor.startup实际运行。如果你把你的代码放在启动时运行而不把它放在Meteor.startup中它可能无法运行,因为它会在JS / html尚未完全下载的地方运行
这是'DOM准备好'时,但不一定是在呈现HTML时,因为这个(HTML)在DOM准备就绪时呈现。
如果您正在寻找在DOM准备好之后运行的内容,并且在页面的html准备好之后,请查找模板的.rendered
回调 - http://docs.meteor.com/#template_rendered
混淆可能来自JQuery中$(document).ready
的概念,但这适用,因为页面已经在服务器端呈现,因此您可以假设它也在客户端上呈现(因为它以这种方式下载)。在Meteor中,页面会在客户端上呈现,因此存在细微差别。
答案 1 :(得分:1)
这里是.startup方法在客户端实际执行的操作:
Meteor.startup = function (cb) {
var doScroll = !document.addEventListener &&
document.documentElement.doScroll;
if (!doScroll || window !== top) {
if (loaded)
cb();
else
queue.push(cb);
} else {
try { doScroll('left'); }
catch (e) {
setTimeout(function() { Meteor.startup(cb); }, 50);
return;
};
cb();
}
};