我想要一个加载模板,无论数据是否准备就绪,加载时间都最短。所以基本上运行加载模板 1 秒,即使加载了模板和订阅?
下面是我的路由器代码。
Router.configure({
layoutTemplate: 'layout',
loadingTemplate: 'loading',
waitOn: function() { return Meteor.subscribe('contacts'); }
});
Router.map(function() {
this.route('acorn', {path: '/'});
});
Router.onBeforeAction('loading');
最佳答案
您可以通过包装对 Meteor.subscribe
的调用并为订阅实例的 ready
和 stop
方法编写传递来实现此目的。您的 ready
版本只会在一秒钟过去并且包装的订阅准备就绪后返回 true。
您的waitOn
方法可能如下所示:
waitOn: function() {
var sub = Meteor.subscribe("contacts");
var dep = new Tracker.Dependency();
var isSubReady = false;
var hasWaitTimePassed = false;
Meteor.setTimeout(function() {
hasWaitTimePassed = true;
dep.changed();
}, 1000);
Tracker.autorun(function() {
isSubReady = sub.ready();
dep.changed();
});
return {
ready: function() {
dep.depend();
return hasWaitTimePassed && isSubReady;
},
stop: function() {
sub.stop();
}
};
}
当然,如果你想在很多地方使用它,你会想把所有的逻辑包装到一个可重用的函数中,这样你就可以做类似的事情:
waitOn: function() {
return subscribeWithDelay("contacts", 1000);
}
关于javascript - 我将如何在加载模板上设置最小超时函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26409297/