千家信息网

如何改造jquery扩展为layui模块

发表于:2024-11-14 作者:千家信息网编辑
千家信息网最后更新 2024年11月14日,这篇文章主要介绍如何改造jquery扩展为layui模块,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Layui中内置了jquery只有你所使用的模块有依赖到它,它才会加载,并
千家信息网最后更新 2024年11月14日如何改造jquery扩展为layui模块

这篇文章主要介绍如何改造jquery扩展为layui模块,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

Layui中内置了jquery

只有你所使用的模块有依赖到它,它才会加载,并且如果你的页面已经script引入了jquery,它并不会重复加载。内置的jquery模块去除了全局的$和jQuery。

这是layui文档中的描述,它内置了jq,但是去除了全局的$和jQuery对象,也就是在window的全局对外接口被删除了。

拖拽组件的实现假设siam.js是一个扩展,里面提供了一个类似这样的方法

原始内容
// 延迟执行完之后会把div内容变为 > 这是新内容

这就是一些传统jq扩展的实现原理,对于你调用的dom,它会继续处理操作,如本文开始说的,我使用的是拖拽组件,扩展会通过这样子的对外接口 将dom处理为可以拖拽的,并且带有其他事件的元素。

问题冲突

以上两点是问题的基础补充,在layui中,去除了全局的$和Jquery对象,默认扩展中有以下代码

;(function($, window, document, undefined){    .....扩展内容})(window.jQuery || window.Zepto, window, document);

在最后面,它依赖加载window.Jquery对象,window对象,document对象

传递到上面的闭包中对应$, window, document, undefined(因为没有传递 所以也一样)

所以导致闭包中使用的$是没有值的,一加载这个扩展就报错

$ is not defined或者Typeerror Cannot Read Property fn of undefined

测试过单独引入jq文件也解决不了问题,(我使用的模板加载顺序的原因,先加载了layui内置的jq)

layui自定义模块

这是官网的介绍

layui.code/**  扩展一个test模块**/layui.define(function(exports){ //提示:模块也可以依赖其它模块,如:layui.define('layer', callback);  var obj = {    hello: function(str){      alert('Hello '+ (str||'mymod'));    }  };  //输出test接口  exports('mymod', obj);});

我们可以使用layui自定义模块的方法,将layui的其他模块传递进来,使扩展能操作layui中的jq对象

layui.define(["jquery"], function (exports) {    var $ = layui.jquery;    // 把第一行的 ;(function($, window, document, undefined){ 换成以上    ...扩展内容    // 把最后一行的换成以下    var obj = {    };    exports("自定义模块名", obj);});

使用

 layui.use(['form','jquery','自定义模块名'], function (admin, form) {     var $ = layui.jquery;     var obj = layui.自定义模块名;     // 正常使用 即可  比如我的     $("#test").desta('open');});

以上是"如何改造jquery扩展为layui模块"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

0