千家信息网

JavaScript异步编程中Jscex如何无创痕切入jQueryUI

发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,JavaScript异步编程中Jscex如何无创痕切入jQueryUI,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。我们使用tab插件:
千家信息网最后更新 2025年01月19日JavaScript异步编程中Jscex如何无创痕切入jQueryUI

JavaScript异步编程中Jscex如何无创痕切入jQueryUI,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

我们使用tab插件:

效果:鼠标划过就可以切换tab.

Jscex是JavaScript Computation EXpressions的缩写,它为JavaScript语言提供了一个monadic扩展,能够显著提高一些常见场景下的编程体验。Jscex项目完全使用JavaScript编写,能够在任意支持ECMAScript 3的执行引擎里使用,包括各浏览器及服务器端JavaScript环境(例如 Node.js )。

目前Jscex主要包括以下几点功能:

JIT编译器:在运行时动态编译代码,主要用于开发环境。

AOT编译器:在执行前静态编译代码。静态编译后的代码可以脱离JIT编译器执行,因此主要用于生产环境。

异步编程库:基于Jscex生成的monadic代码,大大简化JavaScript下的异步编程难度。

异步编程的重要性不言而喻,对于JavaScript来说更是如此。JavaScript并没有提供任何能够阻塞代码执行过程的机制,任何一个"耗时"的操作都必须写成异步的模式。传统的异步操作会在完成时通过回调函数传回结果,我们可以在回调函数中进行下面的工作。

但这也是造成异步编程十分困难的主要原因。我们一直习惯于"线性"地编写逻辑,但是异步操作所带来的大量回调把我们的算法分解地支离破碎。我们不能用if来实现逻辑分支,也不能用while/for/do来实现循环。更不提异步操作之间的组合、错误处理以及取消操作了。

Jscex及它的异步编程库便是为了解决这些困难而诞生的。

Jscex是JavaScript Computation EXpressions的缩写,它为JavaScript语言提供了一个monadic扩展,能够显著提高一些常见场景下的编程体验。Jscex项目完全使用JavaScript编写,能够在任意支持ECMAScript 3的执行引擎里使用,包括各浏览器及服务器端JavaScript环境(例如 Node.js )。

目前Jscex主要包括以下几点功能:

JIT编译器:在运行时动态编译代码,主要用于开发环境。

AOT编译器:在执行前静态编译代码。静态编译后的代码可以脱离JIT编译器执行,因此主要用于生产环境。

异步编程库:基于Jscex生成的monadic代码,大大简化JavaScript下的异步编程难度。

异步编程的重要性不言而喻,对于JavaScript来说更是如此。JavaScript并没有提供任何能够阻塞代码执行过程的机制,任何一个"耗时"的操作都必须写成异步的模式。传统的异步操作会在完成时通过回调函数传回结果,我们可以在回调函数中进行下面的工作。

但这也是造成异步编程十分困难的主要原因。我们一直习惯于"线性"地编写逻辑,但是异步操作所带来的大量回调把我们的算法分解地支离破碎。我们不能用if来实现逻辑分支,也不能用while/for/do来实现循环。更不提异步操作之间的组合、错误处理以及取消操作了。

Jscex及它的异步编程库便是为了解决这些困难而诞生的。

后来,官网帮这个tab插件扩展了一个自动切换的功能,只需要这样写就行:

 

扩展的代码如下:

 $.extend($.ui.tabs.prototype, {  rotation: null,  rotate: function (ms, continuing) {  var self = this,  o = this.options;  var rotate = self._rotate || (self._rotate = function (e) {  clearTimeout(self.rotation);  self.rotation = setTimeout(function () {  var t = o.selected;  self.select(++t < self.anchors.length ? t : 0);  }, ms);  if (e) {  e.stopPropagation();  }  });  var stop = self._unrotate || (self._unrotate = !continuing  ? function (e) {  if (e.clientX) { // in case of a true click  self.rotate(null);  }  }  : function (e) {  t = o.selected;  rotate();  });  // start rotation  if (ms) {  this.element.bind("tabsshow", rotate);  this.anchors.bind(o.event + ".tabs", stop);  rotate();  // stop rotation  } else {  clearTimeout(self.rotation);  this.element.unbind("tabsshow", rotate);  this.anchors.unbind(o.event + ".tabs", stop);  delete this._rotate;  delete this._unrotate;  }  return this;  }  });  })(jQuery);

依然是那么费解的代码!在官方没有扩展之前,我们可以用Jscex介样子实现:

 

可以看得出来,这样的话Jscex没有对JqueryUI做任何介入,Jscex只是外部控制的一层壳。这样无法对测试出Jscex是否能与冲突或者异常,那么,我们就来用Jscex重写官方的扩展方法吧!

 $.extend($.ui.tabs.prototype, {  rotation: null,  rotate: function (ms, continuing) {  var self = this,  o = this.options;  var swicthAsync = eval(Jscex.compile("async", function () {  while (true) {  for (var i = 0; i < self.anchors.length; i++) {  $await(Jscex.Async.sleep(ms));  self.select(i);  }  }  }));  swicthAsync().start();  return this;  }  });  })(jQuery);

运行效果如下,一切正常!但是continuing参数暂时没有起作用,该参数是决定用户在选中后是否继续循环下去。

看完上述内容,你们掌握JavaScript异步编程中Jscex如何无创痕切入jQueryUI的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

编程 代码 编译 环境 编译器 困难 函数 逻辑 静态 功能 原因 方法 循环 运行 创痕 显著 重要 不言而喻 之间 传统 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 静安区上门软件开发答疑解惑 代县第五届国家网络安全宣传周 网络安全攻防常用手段 kali网络安全设置教程 淘宝网站什么软件开发的 河北凡泽互联网科技有限公司 金蝶更换服务器不可用 .网络安全工程师 网络技术和计算机应用的区别 数据库调优增加索引 区块链p2p网络技术 台服无法连接服务器 河南手机软件开发专升本难吗 网络安全管理局重要通信处 生态环境网络安全和信息化工作 软件开发人员的总结 服务器权限统一认证 北京中科软件开发公司吗 lnk文件运行需要哪个数据库 西安雷圣福网络安全吗 net上传文件 到数据库 组态王历史数据库未启动有影响吗 dns服务器会记录你的浏览 宝山区工商软件开发哪家便宜 西安网络安全大专学校排名 双路服务器内存插几条 服务器不联网是否安全 沈阳新华互联网科技学校微信 网络安全法律解读ppt 服务器连接上无法上网
0