我创建了两个模板( A 和 B )。
A - 当用户没有在某个Mongo集合中创建文档时显示。
B - 显示用户是否在集合中创建了文档。
基本上我正在显示一个" Theres nothing here here"当没有内容时。
为实现这一目标,我使用帮助程序查询mongo以检查文档是否存在。它看起来如下:
defaultCheck: function() {
var offerid = this.offerAccepted;
var id = Meteor.userId();
var result = Listing.find({
$or: [{
creator_id: Meteor.userId(),
status: "Completed"
}, {
offer_creator: Meteor.userId(),
status: "Completed"
}]
});
return Boolean(result.count());
}
因此返回true或false布尔值。
在我的布局模板中,我使用#if来检查defaultCheck
助手的值,并隐藏或显示 A 或 B 模板
{{#if defaultCheck}}
{{#each meetup}}
{{> ProfileActiveCard}}
{{/each}}
{{else}}
{{> DefaultProfileActive}}
{{/if}}
问题是查询太慢而 A 模板在查询完成之前会短暂显示(闪烁)。
我该如何防止这种情况?
答案 0 :(得分:1)
这是我在数据加载时显示微调器的建议方法:
私人变量:
var isDataLoaded = false;
<强>助手:强>
dataLoaded: function() {
return isDataLoaded;
}
defaultCheck: function() {
var offerid = this.offerAccepted;
var id = Meteor.userId();
var result = Listing.find({
$or: [{
creator_id: Meteor.userId(),
status: "Completed"
}, {
offer_creator: Meteor.userId(),
status: "Completed"
}];
});
isDataLoaded = true; // should be set to true only after database query finishes
return Boolean(result.count());
}
<强>模板:强>
{{#if !dataLoaded}}
{{> spinner}}
{{else}}
{{#if defaultCheck}}
{{#each meetup}}
{{> ProfileActiveCard}}
{{/each}}
{{else}}
{{> NoDataFoundTemplate}}
{{/if}}
{{/if}}
我不是100%确定这会按预期工作,或者它是最好的方法,但这是一个开始。