Web应用程序 - Javascript - 显示微调器,同步保存数据,删除微调器
web applications - Javascript - Show Spinner, Save Data Synchronously, Remove Spinner
我正在尝试创建一个允许您挂钩到保存操作的javascript插件。不过,我想要一些围绕逻辑的逻辑:
- 显示微调器
- 执行保存挂钩
- 执行保存逻辑
- 删除微调器
这是我的代码示例:
function save(){
var settings = getSettings();
showSpinner();
// Hook-in call
if(settings.onSave)
settings.onSave();
saveState();
removeSpinner();
}
showSpinner() 只是隐藏保存/取消按钮,并在其位置显示一个微调器。
hideSpinner() 则相反。
saveState() 将输入字段中的数据保存到其数据属性中。
settings.onSave() 可以是插件用户传递给配置的任何代码。
当我运行进程时,微调器永远不会显示,即使我定义的挂钩需要 ~1.5 秒才能返回。如果我在调试器中暂停代码,微调器确实有机会显示,并且在操作完成后它确实会消失。
解决此问题的最佳方法是什么?我完全不熟悉javascript中的异步设计模式。我知道 javascript 可以在一个线程上运行,但我不知道为什么保存操作会妨碍显示微调器。
在 Javascript 将控制权交还给浏览器之前,您的浏览器不会更新界面,这意味着您需要在浏览器显示微调器之前从函数返回。 使用 setTimeout
将控制权短暂地交还给浏览器。
function save(){
showSpinner();
setTimeout(function(){
var settings = getSettings();
// Hook-in call
if(settings.onSave)
settings.onSave();
saveState();
removeSpinner();
}, 0 );
}
相关文章:
- 如何在服务器上保存数据以备日后使用
- zp.midpass.ru如何在浏览器中保存数据
- Google Chrome扩展在本地保存数据
- Javascript/AngularJS本地保存数据
- jquery ajax到php脚本不保存数据
- 使用LocalStorage保存数据
- jquery保存数据,直到phonegap应用程序关闭
- 以HTML和javascript保存数据
- 单击指向外部网站的链接后,通过MySQL保存数据
- AngularJS:无法保存数据
- 如何在不编码或保存数据的情况下将二进制数据从javascript传递到actionscript(网页到flash)
- 如何在AngularJS中刷新时在服务中持久保存数据
- 如果从浏览器控制台提交,Knockoutjs不会保存数据
- 在nodejs中执行procces数组时保存数据
- MongoDB 在保存数据时抛出错误(拓扑已损坏)
- HTML 在表单之间保存数据
- HTML/JS - 保存数据-* 供以后使用
- 保存数据 asp.net 后单击按钮时显示警报消息
- Chrome 扩展程序保存数据
- 如何在应用程序上保存数据