如何强制Meteor立即重新发布,或优先考虑反应式更新?
我正在尝试构建自己的加载微调器,设置它的方法是使用一个助手来检查条目数组是否为空如何强制Meteor立即重新发布,或优先考虑反应式更新?,meteor,reactive-programming,meteor-blaze,Meteor,Reactive Programming,Meteor Blaze,我正在尝试构建自己的加载微调器,设置它的方法是使用一个助手来检查条目数组是否为空 {{#if viewThisPage}} {{#if noEntriesLoaded}} <div class="loadingSpinner">...</div> {{/if}} {{#each entry}} {{ > myTemplate}} {{/each}} {{/if}} {{#如果查看此页面} {{{#如果未加载EntriesLoaded
{{#if viewThisPage}}
{{#if noEntriesLoaded}}
<div class="loadingSpinner">...</div>
{{/if}}
{{#each entry}}
{{ > myTemplate}}
{{/each}}
{{/if}}
{{#如果查看此页面}
{{{#如果未加载EntriesLoaded}
...
{{/if}
{{{#每个条目}
{{>myTemplate}}
{{/每个}}
{{/if}
最初,viewThisPage为false。当viewThisPage设置为true时,我会查询mongoDB中的条目。我从基准测试中看到的问题是,查询速度太快,以至于所有DOM更新事件都挤在一起,以至于微调器永远不会被渲染,换句话说,noEntriesLoaded在很短的时间内都是真的
然而,在触发viewThisPage和页面实际呈现之间大约有1200毫秒的延迟。我希望微调器在此滞后期间显示
我想了三种方法来解决这个问题
可以在渲染条目时显示微调器 仅当呈现所有条目时,此代码才会隐藏loadingSpinner:
meteor add reactive-var
另外,在呈现条目
模板之前,您可能需要检查条目是否已加载
<template name="Main">
{{#if viewThisPage}}
{{#if entriesAreNotReady}}
<div class="loadingSpinner">...</div>
{{/if}}
{{> Entries entry=entry onRendered=onEntriesRendered}}
{{/if}}
</template>
<template name="Entries">
{{#each entry}}
{{> myTemplate}}
{{/each}}
</template>
Template.Main.onCreated(function() {
this.areEntriesRendered = new ReactiveVar(false);
});
Template.Main.helpers({
onEntriesRendered: function() {
var areEntriesRendered = Template.instance().areEntriesRendered;
return function() {
areEntriesRendered.set(true);
};
},
entriesAreNotReady: function() {
return ! Template.instance().areEntriesRendered.get();
}
});
Template.Entries.onRendered(function() {
this.data.onRendered();
});