当应用程序停留时告诉用户“正在保存”;(方法.调用正在运行但未完成)

Say to user when app stay "saving" (Method.call is running and not completed)

本文关键字:方法 调用 未完成 运行 保存 停留 应用程序 用户 正在保存      更新时间:2023-09-26

当用户编辑文本时显示"Saving…"的一种google文档。或者所有使用ajax并且需要在服务器上保存内容的网站。

我已经理解,流星保存MongoDB(服务器端)通过方法。呼叫(不是存根)。但怎么能知道什么时候所有的方法。调用(写数据库)结束了吗?(非客户端(minimongo))

编辑:

在我的例子中,有3种方法用于CRUD操作,定义在客户机和服务器上:

  • 删除

当此方法在服务器上运行时,我希望用户收到"saving…"消息的通知。

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

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

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}}

其中theThingIsLoading是执行Session.get("theThingIsLoading")的助手

我建议使用大气包"auto nprogress"。当一个动作被处理时,它会在屏幕顶部显示一个漂亮的加载条。

希望这就是你想要的!

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

我认为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}}

注意:

在methodcall的回调函数上没有括号

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

Methodsareongoing在所有模板中都是可用的,因为UI。registerHelper

如果你想要一个"保存"状态显示一个位置,这个答案是非常错误的…这个答案假设您希望显示如下内容:

John Smith saving

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

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

原始答:

你试过使用'isSimulation'属性吗?

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

如果你的方法在客户端也可用,它应该工作。如果没有,请将您的方法添加到此线程

更新:更新后的简单CRUD操作应该能够在客户机上运行。如果你尝试了这个,但从来没有看到"保存"位在你的页面上,这是因为它是如此之快:-/在《发现流星》这本好书中,为了说明这种技术他们实际上使用了一种奇特的延迟方法,因此用户能够看到模型仿真。