Meteor Blaze:在渲染父级之前不要等待子模板渲染

时间:2017-06-14 11:06:49

标签: asynchronous meteor meteor-blaze

和Blaze一起玩,我意识到以下几点: 如果我有一个父模板,其中我包含一个{{> child_template }}

的子模板

然后Blaze将等待渲染父模板之前渲染子模板。在某些情况下这可能会很好,但不是全部。

例如,如果我的父模板包含<h1>Welcome to my page</h1>,则子项包含10,000个项目的列表。我想要一种方法尽快显示<h1>并等待10 000个项目稍后出现

我目前正在做的事情是:

Template.parent.onRendered(function(){
    Blaze.render(Template.child, document.body);
});

它正在工作,但我想知道是否有人有一个更好的解决方案,似乎很常见的问题。感谢

2 个答案:

答案 0 :(得分:1)

默认情况下,您可以将自定义布尔参数传递给子组件false,但父组件的onRendered将其设置为true。并且子组件应检查此参数,除非它true,否则不会呈现任何内容。

Template.parent.onCreated(function() {
  this.state = new ReactiveDict();
  this.state.setDefault({
    "canRender": false,
  });
}

Template.parent.onRendered(function() {
  this.state.set("canRender", true);
}

Template.parent.helpers({
  canRender() {
    return Template.instance().state.get("canRender");
  }
});

将状态传递给子组件:

<template name="parent">
  {{>child canRender=canRender}}
</template>

<template name="child">
  {{#if canRender}}
    <p>Millions of items go here.</p>
  {{/if}}
</template>

答案 1 :(得分:0)

正如您所说,您的儿童模板有一个包含10000个项目的列表。所以,这意味着你订阅了一些收藏品。您可以在我们的代码下面解决您的问题。

Traceback (most recent call last):
  File "/Users/kdawod/.virtualenvs/python2.7/lib/python2.7/site-packages/scrapy/cmdline.py", line 168, in <module>
    execute()
  File "/Users/kdawod/.virtualenvs/python2.7/lib/python2.7/site-packages/scrapy/cmdline.py", line 109, in execute
    settings = get_project_settings()
  File "/Library/Python/2.7/site-packages/scrapy/utils/project.py", line 68, in get_project_settings
    settings.setmodule(settings_module_path, priority='project')
  File "/Library/Python/2.7/site-packages/scrapy/settings/__init__.py", line 292, in setmodule
    module = import_module(module)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/importlib/__init__.py", line 37, in import_module
    __import__(name)
ImportError: No module named settings