【问题标题】:How can I display a progress loader/ spinner while meteor.js waits for a web service call?在meteor.js等待Web服务调用时如何显示进度加载器/微调器?
【发布时间】:2017-01-22 17:02:13
【问题描述】:

如何在meteor.js 等待网络服务调用时显示进度加载器?在等待来自 mongo 集合的数据时,我一直在使用 Iron 路由器来显示进度,但现在我面临的数据来源略有不同。因此,如果您有这个想法,请随时给我一个铁路由器解决方案。欢迎任何想法。 如果您对我的代码感兴趣,如下所示:

    if (Meteor.isClient) {
    Template.confirmWeather.onRendered(function(){
        var validator = $('.confirmWeatherAndGoToMessage').validate({
            submitHandler: function(event){
    Meteor.bindEnvironment(Meteor.call('testWeather',Meteor.bindEnvironment(function(error,result)
                {
                    if (error)
                    {
                        console.log(error.message)
                    }
                    else
                    {
                        var userId = Meteor.userId();
                        var user = Meteor.users.findOne({_id: userId});
                        if (user.testData)
                        {
                            Router.go('showFocust');
                        }
                        else
                        {
                            Router.go('showError');
                        }
                    }
                })));


            }
        });
    });

}

请注意,方法调用可以移动到 showFocust 模板。所以没有什么是一成不变的。哦,如果你有一个类似的例子,你以前解决过,请随时解释你是如何解决的。谢谢

【问题讨论】:

    标签: javascript meteor iron-router


    【解决方案1】:

    假设您尝试在您提到的模板中显示加载器,我会尝试使用响应式 var 并像这样自动运行:

    if (Meteor.isClient) {
    Template.confirmWeather.onRendered(function(){
        var instance = this;
        instance.is_loaded = new ReactiveVar(false);
    
        var validator = $('.confirmWeatherAndGoToMessage').validate({
            submitHandler: function(event){
    Meteor.bindEnvironment(Meteor.call('testWeather',Meteor.bindEnvironment(function(error,result)
                {
                    if (error)
                    {
                        console.log(error.message)
                    }
                    else
                    {
                        var userId = Meteor.userId();
                        var user = Meteor.users.findOne({_id: userId});
                        if (user.testData)
                        {
                            Router.go('showFocust');
                        }
                        else
                        {
                            Router.go('showError');
                        }
    
                        instance.is_loaded.set(true)
                    }
                })));
    
    
            }
        });
    });
    

    }

    当 is_loaded 为 false 时,在您的模板中显示 gif/loader。您可以在模板的帮助程序中以 Template.instance().is_loaded.get() 的形式访问 is_loaded。

    【讨论】:

    • Mathieu K,不幸的是,您的建议不起作用,因为 is_loaded 不会在页面加载之间保留在模板中,并且无法像您在页面加载之间更新 html 字段一样更新,除非我遗漏了什么。所以在我看来,您不仅限于在 confirmWeather 模板上进行方法调用,该逻辑可以移动到 showFocust 模板,在这种情况下您会立即路由到模板。有接受者吗?
    • Mathieu K. 经过努力,您的建议使我找到了解决方案。我遇到了这个线程stackoverflow.com/questions/30546486/…。谢谢。
    • 还有,你的功夫很厉害。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多