当用户编辑文本时显示"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操作应该能够在客户机上运行。如果你尝试了这个,但从来没有看到"保存"位在你的页面上,这是因为它是如此之快:-/在《发现流星》这本好书中,为了说明这种技术他们实际上使用了一种奇特的延迟方法,因此用户能够看到模型仿真。