当应用程序保持“保存”(Method.call正在运行且未完成)时对用户说

时间:2014-05-04 12:50:26

标签: javascript meteor

一种google文档,当用户编辑文本时会显示“正在保存...”。或者所有使用ajax并且必须在服务器上保存内容的网站。

我已经了解Meteor通过Method.Call(不是存根)保存在MongoDB(服务器端)上。但是怎么知道所有method.call(写入db)何时结束? (不在客户端(minimongo))

修改

就我而言,在客户端和服务器上定义了3种CRUD操作方法:

  • 插入
  • 更新
  • 删除

我希望用户通过“保存...”消息通知,而此方法在服务器上运行。

从客户端调用方法时可以使用异步回调吗?

4 个答案:

答案 0 :(得分:1)

异步回调确实是你想要的。在最简单的情况下:

Session.set("theThingIsLoading", true);
Meteor.call("doTheThing", function (error, result) {
    if (error) {/* report it somehow */}
    Session.set("theThingIsLoading", false);
});

{{#if theThingIsLoading}}
    <p>Loading...</p>
{{/if}}

theThingIsLoadingSession.get("theThingIsLoading")的帮助者。

答案 1 :(得分:0)

我建议大气包“auto nprogress”。当处理动作时,它将在屏幕顶部显示一个花哨的加载条。

希望它能满足您的需求!

https://atmospherejs.com/package/auto-nprogress

答案 2 :(得分:0)

我认为如果调用多个方法,user3374348的答案可能会导致奇怪的行为。 我建议:

increaseOngoingMethods=function(){
    Session.set("ongoingMethods")=Session.get("ongoingMethods")+1;
}

decreaseOngoingMethods=function(){
    Session.set("ongoingMethods")=Session.get("ongoingMethods")-1;
}

increaseOngoingMethods();
Meteor.call("doTheThing", decreaseOngoingMethods);


UI.registerHelper('Methodsareongoing', function() {
    return !!Session.get("ongoingMethods")
});

{{#if Methodsareongoing}}
    <p>Loading...</p>
{{/if}}

注意:

方法调用中的回调函数没有任何限制。

在增加和减少函数声明之前没有变量 - 这样它们应该全局可用。

由于UI.registerHelper

,所有模板都提供了方法

答案 3 :(得分:-1)

编辑:Andrew Mao的评论让我意识到我可能误解了这个问题! 如果您希望“保存”状态显示一个,则此答案非常错误... 这个答案假定您想要显示如下内容:

John Smith 保存

John Smith是上下文对象的一部分。

如果不是这样 - 请参阅我的其他答案

原始答案:

您是否尝试过使用'isSimulation'属性?

{{#if isSimulation}}
  <b>Saving</b>
{{/if}}

如果您的方法在客户端上也可用,它应该可以工作。 如果没有 - 你能不能把你的方法添加到这个帖子

更新: 您更新了帖子 - 简单的CRUD操作应该能够在客户端上运行。 如果您尝试这一点但从未在页面上看到“保存”位,那是因为它如此之快: - / 在好书“探索流星”中,为了说明这种技术,他们实际上使用了一种奇特的延迟方法,因此用户能够看到模型模拟...