开始学习miniui了,虽然代码里有很多0o1l之类的,大概学一学还是可以的吧。

首先在miniui.js看一下有文档加载时会自动执行什么。先列举一下。

1、

OO00(window, "resize",
function($) {var C = mini.__windowResizes;for (var _ = 0,A = C.length; _ < A; _++) {var B = C[_];B[0][Oloool](B[1], $)}
});

2、

mini_onload = function($) {OO00(window, "resize", mini_onresize)
};
OO00(window, "load", mini_onload);

3、

OO00(window, "unload", mini_unload);

4、

(function() {if (hasOn) {var A = mini.getTopWindow();if (A) {function $(_, $) {if ($ == document);else jQuery(document).trigger("mousedown")}jQuery(A.document)[O10lO0]("topmousedown", $);function _(_) {var $ = A.jQuery;if ($) $(A.document).trigger("topmousedown", [document])}jQuery(document)[O10lO0]("mousedown", _);jQuery(window)[O10lO0]("unload",function() {jQuery(A.document).off("topmousedown", $);jQuery(document).off("mousedown", _)})}}
})();

5、

var DateUtil = {}; (function() {DateUtil.dateFormat = {days: {names: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],namesAbbr: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],namesShort: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"]},months: {names: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December", ""],namesAbbr: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", ""]},AM: ["AM", "am", "AM"],PM: ["PM", "pm", "PM"],patterns: {d: "M/d/yyyy",D: "dddd,MMMM dd,yyyy",F: "dddd,MMMM dd,yyyy h:mm:ss tt",g: "M/d/yyyy h:mm tt",G: "M/d/yyyy h:mm:ss tt",m: "MMMM dd",M: "MMMM dd",s: "yyyy'-'MM'-'dd'T'HH':'mm':'ss",t: "h:mm tt",T: "h:mm:ss tt",u: "yyyy'-'MM'-'dd HH':'mm':'ss'Z'",y: "MMMM,yyyy",Y: "MMMM,yyyy"},"/": "/",":": ":",firstDay: 0};

6、

(function() {var A = {tabindex: "tabIndex",readonly: "readOnly","for": "htmlFor","class": "className",maxlength: "maxLength",cellspacing: "cellSpacing",cellpadding: "cellPadding",rowspan: "rowSpan",colspan: "colSpan",usemap: "useMap",frameborder: "frameBorder",contenteditable: "contentEditable"},$ = document.createElement("div");$.setAttribute("class", "t");var _ = $.className === "t";mini.setAttr = function(B, C, $) {B.setAttribute(_ ? C: (A[C] || C), $)};mini.getAttr = function(D, E) {if (E == "height") return jQuery(D).attr("height");if (E == "value" && (isIE6 || isIE7)) {var $ = D.attributes[E];return $ ? $.value: null}if (!D.getAttribute) return null;var C = D.getAttribute(_ ? E: (A[E] || E));if (typeof C == "function" || E == "maxLength") {var F = D.attributes[E];if (F) C = F.value}if (!C && E == "onload") {var B = D.getAttributeNode ? D.getAttributeNode(E) : null;if (B) C = B.nodeValue}return C}
})();

还有一些我认为是在jQuery加载完毕之后执行:

1、

jQuery(function() {if (document.body) document.body.style.visibility = "visible";if (isFirefox) oO1l(document.documentElement, "ff");mini.updateDevice();if (mini.autoParse) setTimeout(function() {var _ = document.documentElement;if ((isIE6 || isIE7) && (loo10o(document.body, "overflow") == "hidden" || (_ && loo10o(_, "overflow") == "hidden"))) {jQuery(document.body).css("overflow", "visible");if (_) jQuery(_).css("overflow", "visible")}mini.__LastWindowWidth = document.documentElement.clientWidth;mini.__LastWindowHeight = document.documentElement.clientHeight;var $ = new Date();mini.isReady = true;mini.parse(null, mini_layoutOnParse);OlO0o1()},1)
});

2、

jQuery(function() {setTimeout(function() {var A = mini.getComponents();for (var B = 0,C = A.length; B < C; B++) {var _ = A[B];if (_ instanceof Olo01l) {var $ = _[o000l1]().value;if (_.value !== $) _.value = $}}},300)
});

3、

jQuery(function() {setTimeout(function() {try {var $ = mini.getActiveElement();if ($) {var A = jQuery($).closest(".mini-buttonedit,.mini-textbox");if (A.length) {var B = mini.get(A[0]);if (B) {B[lll0O1]();B[o1OOlO]()}}}} catch(_) {}},100)
});

然后说一下上面的1,2,3。

它们会先向windows对象 apply事件 resize、onload、unload

创建委托添加到mini.listeners中
通过OO00 :

oOl11 = “findListener”OO00 = function(_, D, B, A) {_ = l1O1(_);A = A || _;if (!_ || !D || !B || !A) return false;var C = mini[oOl11](_, D, B, A);//判断该listener是否已经存在if (C) return false;var $ = mini.createDelegate(B, A);//如果不存在就创建委托,通过apply方法通过对象A来执行,这时候A为windowmini.listeners.push([_, D, B, A, $]);//添加到mini.listeners数组中if (mini.isFirefox && D == "mousewheel") D = "DOMMouseScroll";jQuery(_).bind(D, $)
};

l1O1在这里没什么用,还是返回window本身,看一下代码:
//找到该元素,B可以是元素,也可以是id/#id
//既然document.getElementById() 不能找到元素,
//为什么还要通过后续的操作,去遍历子节点判断id呢?
//可能是构建了一个节点,并没有添加到DOM上。这样子的情况下B为子节点的id,_为父节点
l1O1 = function(B, _) {if (typeof B == "string") {if (B.charAt(0) == "#") B = B.substr(1);var $ = document.getElementById(B);if ($) return $;if (_ && !O1O0(document.body, _)) {var D = _.getElementsByTagName("*");for (var A = 0,C = D.length; A < C; A++) {$ = D[A];if ($.id == B) return $}$ = null}return $} else return B
};

然后判断事件是否已经存在:

//判断该listener是否已经存在
findListener: function(A, F, C, B) {A = l1O1(A);B = B || A;if (!A || !F || !C || !B) return false;var _ = mini._getListeners();for (var E = _.length - 1; E >= 0; E--) {var D = _[E];try {if (D[0] == A && D[1] == F && D[2] == C && D[3] == B) return D} catch($) {}}},
_getListeners: function() {var $ = mini.listeners;//是mini对象的数组对象return $},

如果没有存在,就创建委托,并保存它。【注意apply的用法,$是window,还是不清楚通过这样子怎么触发对应的事件处理程序】

/创建委托,并通过$对象来执行该方法,返回的是一个方法
createDelegate: function(_, $) {if (!_) return function() {};return function() {return _.apply($, arguments)}},

通过这样,在不添加任何js代码程序的情况下,的确绑定好了对应的事件处理程序。

比较有趣的是jQuery中的方法1的处理,里面有mini.parse()的调用。如果我们能够在此方法执行完毕之后再执行自己的js代码,那么我们就不用再写mini.parse()了。

下次再说说自己的mini.parse()和源文件中的mini.parse()的调用。其他一些执行的方法也之后看看做了一些什么事情。

good night.


转载于:https://www.cnblogs.com/jianIsTheBest/p/11210503.html

miniui 加载文件时会做的一些事情相关推荐

  1. 【转载】ADS分散加载文件使用总结(lpc23xx)

    有如下分散加载文件: ROM_LOAD 0x00000000              ;// Origination Point of Code (Code in Flash) {     ROM_ ...

  2. html资源加载,如何加载文件资源 (HTML)

    如何加载文件资源 (HTML) 01/28/2016 本文内容 [ 本文适用于编写 Windows 运行时应用的 Windows 8.x 和 Windows Phone 8.x 开发人员.如果你要针对 ...

  3. 未能加载文件或程序集“SqlServerDal”或它的某一个依赖项。系统找不到指定的文件。...

    今天遇到一个挺怪的问题,采用了工厂模式后,出去找不到程序集的问题: 未能加载文件或程序集"Tianyige.SqlServerDAL"或它的某一个依赖项.系统找不到指定的文件. 解 ...

  4. 未能加载文件或程序集mysql.web.v20__关于MySQL Server影响ASP.NET网站使用的问题:未能加载文件或程序集MySql.Web.v20...

    标签: 最近开发的ASP.NET MVC 4网站,之前头头说如果遇到装过MySQL的机器就绕着走,还觉得奇怪 嘛,该来的迟早都会来 于是撞上了一台 启动网站再访问,总是出错,提示"未能加载文 ...

  5. 未能加载文件或程序集Tianyige.SqlServerDAL问题解决

    解决思路: 以前遇到过这类问题,问题在于对程序集和命名空间名称混淆了,比如:命名空间叫SQLServerDAL,而程序集可能叫"Tianyige.SQLServerDAL",或者叫 ...

  6. 从MDK分散加载文件学习STM32启动流程

    一直在用ARM的Cortex-M系列做产品开发,也陆陆续续学习了ARM的启动流程.汇编启动文件,但是总感觉没有连贯的把全部知识串起来,不知道某些汇编语句为什么要这么写,没法按照自己的情况进行修改.今天 ...

  7. 【Godot】加载文件数据

    Godot 3.3 rc6 接着上个教程 [GDScript]装备栏 我们开始给物品数据加载出来,之前使用资源的方式是用来加载小量数据的,如果是大量数据,那就不可避免需要加载文件中的数据. 加载数据代 ...

  8. 未能加载文件或程序集“XXX.dll”或它的某个依赖项的解决方法

    问题: 昨天从开发机拷贝exe程序到测试机上测试时,发现程序一运行就报以下错误:未能加载文件或程序集"A.dll"或它的某一个依赖项.找不到指定的模块. 相关知识: 1.应用程序查 ...

  9. C# 调用NationalInstruments的dll报错问题 未能加载文件或程序集

    C# 调用NationalInstruments的dll报错问题 问题原因:dll版本不匹配导致的,需要做如下操作解决问题 未能加载文件或程序集"NationalInstruments.Co ...

最新文章

  1. 线程通信问题--生产者和消费者问题
  2. java8 camel_Meet Fabric8:基于Camel和ActiveMQ的开源集成平台
  3. Magento 获取系统设置 How to get data from Magento System Configuration
  4. 虚拟机控制数据结构 (VMCS)状态转换
  5. linux定时任务crontab的设置
  6. BTREE这种Mysql默认的索引方式,具有普遍的适用性
  7. 基于隐式调用风格的kwic实现
  8. Java的OOP编程思想
  9. 2022年五一数学建模竞赛C题
  10. SPEI不同时间尺度的意义
  11. 2016河南省第九届ACM程序设计竞赛[正式赛四]
  12. 前端开发程序员的月薪到底有多高?
  13. 2021-11-07算法的本质是什么?
  14. 为什么Multi-DRM如此重要?
  15. 大话设计模式之爱你一万年:大话设计模式之爱你一万年由来
  16. 将旧硬盘的内容克隆到新硬盘
  17. IOS获取崩溃日志信息
  18. 查询具体到时分秒的时间段数据(查询昨天的下午四点到今天的下午四点的数据)
  19. Python 2.7和NLTK安装教程
  20. 最大公因数GCD的分配律、结合律 - 证明及其简单应用

热门文章

  1. 两个sql交集_数据库(sql)关键字
  2. c语言程序员写贪吃蛇代码28,厉害了,程序员28行代码写贪吃蛇游戏,附源码!...
  3. 创建线程时候多参数传递方法及参数改变问题--扫雷辅助(三)
  4. 0-1背包问题暴力递归
  5. java中动态顺序死锁问题
  6. 关于m_pMainWnd = dlg的错误
  7. MFC使用CCommandLineInfo处理命令行
  8. 文件的文本打开方式和二进制打开方式的区别
  9. 左值和左值引用、右值和右值引用
  10. STL容器的线程安全