我希望有一个加载模板,无论数据是否准备就绪,加载时间最短。所以基本上运行加载模板1秒,即使加载了模板和订阅?
我的路由器代码如下。
Router.configure({
layoutTemplate: 'layout',
loadingTemplate: 'loading',
waitOn: function() { return Meteor.subscribe('contacts'); }
});
Router.map(function() {
this.route('acorn', {path: '/'});
});
Router.onBeforeAction('loading');
答案 0 :(得分:2)
您可以通过将调用包装到Meteor.subscribe
并为订阅实例的ready
和stop
方法编写passthrough来完成此操作。您的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);
}