首页 > 其他分享 >layui 事件管理

layui 事件管理

时间:2024-05-10 22:58:41浏览次数:24  
标签:管理 layui eventName 事件 filterName config event

// config 其实就是每个 layui 实例的 cache 属性

// 自定义模块事件
Layui.prototype.onevent = function (modName, events, callback) {
  if (typeof modName !== "string" || typeof callback !== "function")
    return this;

  // 解释:相当于注册事件回调的功能和执行事件回调的功能都在 event 方法中
  // 注意事项:注册事件
  return Layui.event(modName, events, null, callback);
};

// 执行自定义模块事件
Layui.prototype.event = Layui.event = function (modName, events, params, fn) {
  var that = this;
  var result = null;
  var filter = (events || "").match(/\((.*)\)$/) || []; // 提取事件过滤器字符结构,如:select(xxx)
  var eventName = (modName + "." + events).replace(filter[0], ""); // 获取事件名称,如:form.select
  var filterName = filter[1] || ""; // 获取过滤器名称,,如:xxx

  // 调用事件回调
  var callback = function (_, item) {
    var res = item && item.call(that, params);

    // 赋值事件执行结果
    res === false && result === null && (result = false);
  };

  // 如果参数传入特定字符,则执行移除事件
  if (params === EV_REMOVE) {
    delete (that.cache.event[eventName] || {})[filterName];
    return that;
  }

  // 重点1:这里是将事件添加 layui.cache.event 对象中
  // 添加事件
  if (fn) {
    config.event[eventName] = config.event[eventName] || {};

    if (filterName) {
      // 带filter不支持重复事件
      config.event[eventName][filterName] = [fn];
    } else {
      // 不带filter处理的是所有的同类事件,应该支持重复事件
      config.event[eventName][filterName] =
        config.event[eventName][filterName] || [];
      config.event[eventName][filterName].push(fn);
    }
    
    // 直接结束执行
    return this;
  }

  // 重点2:这里是执行事件回调,就是调用事件
  // 执行事件回调
  layui.each(config.event[eventName], function (key, item) {
    // 执行当前模块的全部事件
    if (filterName === "{*}") {
      layui.each(item, callback);
      return;
    }

    // 执行指定事件
    key === "" && layui.each(item, callback);
    filterName && key === filterName && layui.each(item, callback);
  });

  // 返回事件执行结果
  return result;
};

标签:管理,layui,eventName,事件,filterName,config,event
From: https://www.cnblogs.com/fires/p/18185434

相关文章

  • 敏捷开发管理工具哪个更好用一些呢?
    ​选择哪个敏捷工具更好用,取决于企业的具体需求和团队偏好,每个工具都有其独特的优点和适用场景,如果你的团队需要一个简单易用、灵活协作的工具,并且希望有一个直观的界面来跟踪任务进度,那么Trello可能就很合适。如果您的团队专注于敏捷开发,并且需要一个全面支持敏捷开发的工具,那么......
  • Django 静态文件管理与部署指南
    title:Django静态文件管理与部署指南date:2024/5/1017:38:36updated:2024/5/1017:38:36categories:后端开发tags:WebOptCDN加速DjangoCompressWebpackStaticDeployCICD-ToolsSecStatic第一章:介绍Django静态文件的概念和重要性在Web开发中,静态文件......
  • Scrum敏捷项目管理转型有哪些工具可以使用?
    ​在敏捷项目管理转型过程中,有多种工具可以帮助企业更好地实施敏捷方法。选择最适合敏捷项目管理的工具并没有一个固定的答案,因为不同的团队和项目可能有不同的需求和偏好。然而,根据多个来源的推荐和反馈,以下是一些在敏捷项目管理领域被广泛认可且表现优秀的工具:Leangoo领歌: Le......
  • windows10 资源管理器 卡死 底部任务栏不显示程序 点击底部任务栏两次会重启资源管理
     故障存储段,类型0事件名称:AppHangB1响应:不可用CabID:0问题签名:P1:explorer.exeP2:10.0.19041.1266P3:418a6e83P4:a874P5:134217728P6: P7: P8: P9: P10: 附加文件:\\?\C:\ProgramData\Microsoft\Windows\WER\Temp\WERE85A.tmp.WERInternalMetadata.xml\\?......
  • 开源相机管理库Aravis例程学习(七)——chunk-parser
    目录简介例程代码函数说明arv_camera_create_chunk_parserarv_camera_set_chunksarv_chunk_parser_get_integer_value简介本文针对官方例程中的:05-chunk-parser做简单的讲解。并介绍其中调用的arv_camera_create_chunk_parser,arv_camera_set_chunks,arv_chunk_parser_get_integer......
  • K2P路由器安装frp远程管理N1机顶盒
    下一步计划:由于scrcpy的audioforwarding需要Android11+;可有其他方案能传输语音?usbaudio如果存在的话就可以使用web端的scrcpy共享出机顶盒的TVBOX点播功能朗读全文Yourbrowserdoesnotsupporttheaudioelement.有什么用frp内网穿透后,可以主动发起远程控制处于无......
  • 探讨:ARC(Automatic Reference Counting)与手动内存管理的区别及工作原理
    在iOS和macOS开发中,内存管理是一个至关重要的话题。在过去,手动内存管理是一项繁琐且容易出错的任务,而引入了ARC(AutomaticReferenceCounting,自动引用计数)之后,内存管理变得更加简单和安全。本文将详细讨论ARC和手动内存管理之间的区别,并解释ARC的工作原理。1.ARC与手......
  • 在Biwen.QuickApi中整合一个极简的发布订阅(事件总线)
    闲来无聊在我的Biwen.QuickApi中实现一下极简的事件总线,其实代码还是蛮简单的,对于初学者可能有些帮助就贴出来,有什么不足的地方也欢迎板砖交流~首先定义一个事件约定的空接口publicinterfaceIEvent{}然后定义事件订阅者接口publicinterfaceIEventSubscriber<T>w......
  • jenkins安装配置管理(旧)
    jenkins安装配置管理(旧)jenkins安装配置管理1.安装依赖yuminstall-yjava-1.8.0-openjdkjava-1.8.0-openjdk-develjava-version2.添加yum仓库源下载yum仓库源配置文件wget-O/etc/yum.repos.d/jenkins.repohttps://pkg.jenkins.io/redhat-stable/jenkins.repo导......
  • gitlab权限管理,远程仓库(旧)
    gitlab权限管理,远程仓库(旧)6.gitlab权限管理,远程仓库在组中设置的权限会继承到组中的所有项目中在项目中添加权限只影响该项目创建后项目中的成员后,管理员手动设置成员密码(8位以上),成员登陆后系统会要求重设密码dev1登陆,添加host6的公钥,yuminstallgit,[email protected]......