【问题标题】:Meteor.startup(func) - when is the DOM "ready" in Meteor?Meteor.startup(func) - Meteor 中的 DOM 什么时候“准备好”?
【发布时间】:2014-07-19 19:14:35
【问题描述】:

http://docs.meteor.com/#meteor_startup

关于Meteor.startup(func)

在客户端上,该函数将在 DOM 准备好后立即运行。

“DOM 准备就绪”到什么时候?

我问的原因是因为您可以有一个 Meteor 模板,该模板在其中使用许多其他模板(即其他 DOM 元素),并且根据加载这些内容需要多长时间在不同时间加载许多其他内容(即更多的 DOM 元素)。

过去我在 Meteor.startup 上加载了 Javascript 文件,但它们仍然加载得太早,因为整个 DOM 实际上还没有加载。

Meteor.startup( function() {

  //load JS files now

});

那么“DOM 就绪”是什么意思?它绝对不是指“当整个 DOM 加载完毕时”。

【问题讨论】:

    标签: dom meteor


    【解决方案1】:

    Meteor.startup 会在所有文件从服务器(javascript 文件)完全下载后运行。如果您将代码放在启动时运行而不将其放在 Meteor.startup 中,它可能无法运行,因为它会在 JS/html 尚未完全下载的地方运行

    这是“DOM 准备就绪”的时候,但不一定是在呈现 HTML 时,因为这个(HTML)在 DOM 准备就绪时也会呈现。

    如果您正在寻找在 DOM 准备好和页面的 html 准备好之后运行的东西,请查找模板的 .rendered 回调 - http://docs.meteor.com/#template_rendered

    混淆可能来自 JQuery 中的$(document).ready 概念,但这适用,因为页面已经在服务器端呈现,因此您可以假设它也在客户端上呈现(因为它是以这种方式下载的)。在 Meteor 中,页面是在客户端上呈现的,所以会有这细微的差别。

    【讨论】:

    • 你能解释一下第二段吗? “因为当 DOM 也准备好时,它会呈现”你指的是什么“这个”?总结一下 - 当所有文件都完成下载时,就是调用 .startup 的时候。加载整个 DOM 并渲染 HTML 时,就是调用 .rendered 的时候。
    • @fuzzybabybunny 我的意思是 HTML。对,就是这样。我可能会添加特定模板的 HTML。当您使用路由器时,您可能有模板在调用其路径之前不会呈现(例如 /blog 用于博客模板)
    【解决方案2】:

    下面是 .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();
      }
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-05
      • 1970-01-01
      • 2019-06-03
      • 1970-01-01
      • 2014-09-19
      相关资源
      最近更新 更多