我该如何在加载模板上设置最小超时功能

How would I go about setting a minimum timeout function on a loading template

本文关键字:设置 功能 超时 加载      更新时间:2023-09-26

我想要一个加载模板,无论数据是否准备好,都要有最短的加载时间。所以基本上运行加载模板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的调用并为订阅实例的readystop方法编写传递来实现这一点。您的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);
}