2014-05-04 15 views
0

用户编辑文本时显示“保存...”的一种Google文档。或者所有使用ajax的网站都必须在服务器上保存一些内容。当应用程序保持“保存”(Method.call正在运行并未完成)时向用户说出

我知道流星保存在MongoDB(服务器端)通过Method.Call(而不是存根)。但是,如何知道何时所有的method.call(写入数据库)结束? (不是在客户端(minimongo))

编辑:

在我的情况下,也有CRUD操作3的方法,在客户端和服务器的定义:

  • 插入
  • 更新
  • 删除

我该用户的NotI与一个“保存...”消息,而这种方法运行在服务器上。

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

+0

您是否解决了它?如果每次调用某个方法时都不想包含回调函数,请考虑使用回调函数来调用https://medium.com/the-javascript-collection/ce6da2d324fe –

+0

cool!感谢您的建议! – elbowz

回答

0

我会建议气氛包“汽车nprogress”。当一个动作被处理时,它会在屏幕的顶部显示一个奇特的加载条。

希望这是你要找的东西!

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

+0

谢谢!但我知道。我认为工作只对订阅...非为method.call ...我认为必须使用方法 – elbowz

-1

编辑:安德鲁毛泽东的评论使我意识到,我可能误解了这个问题! 如果你想显示一个地方这个答案是非常错误的... 这个答案假定您想展示的东西像一个“节约”状态:

约翰·史密斯节省

了约翰·史密斯是上下文对象的一部分。

如果情况并非如此 - 请参阅我的其他答案

原来的答复:

您是否尝试过使用“isSimulation的财产?

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

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

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

+0

的异步回调是一样的描述在这里:http://docs.meteor.com/#method_issimulation?我有不同的方法,使数据库上的一些CRUD操作。 (例如插入,更新,删除) – elbowz

+0

是的那一个:) 您的方法是位于服务器文件夹还是在客户端可用? –

+0

该方法定位于两者(在“共享”文件夹中) – elbowz

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

theThingIsLoading是一个辅助它确实Session.get("theThingIsLoading")

+0

是的,我曾想过这个解决方案,但我希望有更好的方法。我有很多写在数据库上的方法......但是如果没有替代方法:)谢谢! – elbowz

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

注:

上的methodcall回调函数没有paranthesis。

在增加和减少函数声明前没有var - 它们应该成为全局可用的函数。

方法由于UI.registerHelper在所有模板中都有可用的方法

相关问题