最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

改造传统jquery扩展为layui模块方法介绍

来源:懂视网 责编:小采 时间:2020-11-03 23:09:27
文档

改造传统jquery扩展为layui模块方法介绍

改造传统jquery扩展为layui模块方法介绍:Layui中内置了jquery只有你所使用的模块有依赖到它,它才会加载,并且如果你的页面已经script引入了jquery,它并不会重复加载。内置的jquery模块去除了全局的$和jQuery。这是layui文档中的描述,它内置了jq,但是去除了全局的$和jQuery对象,也就是在
推荐度:
导读改造传统jquery扩展为layui模块方法介绍:Layui中内置了jquery只有你所使用的模块有依赖到它,它才会加载,并且如果你的页面已经script引入了jquery,它并不会重复加载。内置的jquery模块去除了全局的$和jQuery。这是layui文档中的描述,它内置了jq,但是去除了全局的$和jQuery对象,也就是在

Layui中内置了jquery

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

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

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

<div id='test'>原始内容</div>

<script src="https://cdn.bootcss.com/jquery/3.4.0/jquery.min.js"></script>
<script>
$.fn.siam = function(params){
 var dom = this;
 dom.html(params);
};


setTimeout(function(){
 $("#test").siam('这是新内容');
},800);
</script>
// 延迟执行完之后会把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');
});

注意,此篇文章并不是通用方法,只是简单阐述了我解决这个问题的思路和方案,可以参考学习。

更多layui框架知识请关注layui框架教程。

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

改造传统jquery扩展为layui模块方法介绍

改造传统jquery扩展为layui模块方法介绍:Layui中内置了jquery只有你所使用的模块有依赖到它,它才会加载,并且如果你的页面已经script引入了jquery,它并不会重复加载。内置的jquery模块去除了全局的$和jQuery。这是layui文档中的描述,它内置了jq,但是去除了全局的$和jQuery对象,也就是在
推荐度:
标签: 方法 模块 扩展
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top