YUI 的模块信息配置优先级关系梳理

背景

YUI的配置参数较多, 可以在好几个地方配置一个module的相关信息, 如:

//在全局配置, 所以YUI实例共享
YUI_config = {modules: {'w-autcomplete': {requires: ['module1'],path: 'test1.js',}},groups: {modules: {'w-autocomplete': {requires: ['module2'],path: 'test2.js'}}}
}//在某一个YUI实例中配置
YUI({
groups: {fecore: {modules: {'w-autocomplete': {base: 'http://fe.com?f=fecore/test3',type: 'js',requires: ['module3'],}}}
},
modules: {'w-autocomplete': {base: 'http://fe.com?f=fecore/',path: 'w-autocomplete/w-autocomplete.js',type: 'js',}
}
}).use('w-autocomplete', function(Y) {console.log(Y);
}); //在模块文件中申明配置: w-autocomplete.js
M.add('w-autocomplete', function(Y) {...
}, 
'1.0.0', 
{requires: ['module4']
}
);

这三类情况, YUI在加载的时候到底如何来判断, 使用哪一个module的配置信息呢?

配置优先级关系

一个YUI实例config 配置优先级关系从高到底依次为:

  1. YUI(args) 里面的 args, args可以是数组, 数组依次执行 applyConfig(arg[i]);

  2. YUI_config

  3. YUI.GlobalConfig

YUI初始化的时候会将这些参数按如上所述的优先级进行config初始化。 所以当使用YUI(args).use 的方式来使用模块时, args会自动覆盖当前实例Y的modules 配置信息。 

当我们需要给所有YUI实例添加配置参数的时候, 可以直接通过配置 YUI_config 或者 YUI.GlobalConfig 来实现。 也可以在YUI或者YUI实例初始化后,进行动态配置,如:

Y.applyConfig({groups: {}, modules: {} });
YUI.applyConfig({groups: {}, modules: {} }); 

处理同一优先级的配置

对同一优先级的配置使用applyConfig的时候, 由于是Map操作,所以并不能保证config里面的groups & modules的覆盖顺序, 测试了一下for in操作在各个浏览器下的表现, 证明对于key都是字符串的情况,在不同浏览器中执行顺序和书写的顺序有关系。

所以当groups.modules和modules里面都定义了相同module时, 谁定义在后面就以谁的定义为准 。

YUI().add定义的模块信息

YUI().add('w-autocomplete', function(Y) {}, 1.0.0,  {requires: ['module1', 'module2'],use: ['module3', 'module4']
}),

在执行add操作时, YUI.Env.mods里面会新增如下对象:

{detail: {requires: ['module1', 'module2']use: ['module3', 'module4']},version: 1.0.0,name: 'w-autocomplate',fn: fn
}

module加载完毕后, 在执行回调之前, 会先检查加载的依赖链中的missing module, missing module包括module定义中的 requires和use。  得到missing列表后,再用Y.use函数进行reload。 

var missing = [];
var mods = YUI.Env.mods;
var process = function(names, skip) {var i = 0, a = [], name, len, m, req, use;len = names.length;for (i = 0; i < len; i++) {name = names[i];m = mods[name];req = null;use = null;if (m) {used[name] = true;req = m.details.requires;use = m.details.use;} else {if (!G_ENV._loaded[VERSION][name]) {missing.push(name);} else {used[name] = true; // probably css}    }    // make sure requirements are attachedif (req && req.length) {process(req);}    // make sure we grab the submodule dependencies tooif (use && use.length) {process(use, 1);}}
};
process(modules);
redo = missing.length;
if (redo) {Y._use(missing, function() {if (Y._attach(data)) {Y._notify(callback, response, data)}});
}

so, requires 和 use的定义会影响到loader的加载。而和在前面两种方式配置模块的requires和use 主要区别是, 前两种配置依赖的module会在当前模块加载之前加载, 而后面这种方式会在当前模块加载完成后再进行加载。

但是如果在module里面定义的其他信息,如condition等,loader会忽略不管。

总结

如果每个级别的优先级都配置了mod信息, 会按优先级关系逐级覆盖, module信息以最高优先级的配置为准。

如果同级优先级配置里面 modules 和 groups.modules里面有相同的module配置,取决于for in 遍历的顺序。 测试各浏览器结果会按照定义顺序, 后定义的module信息优先级更高。  

 

转载于:https://www.cnblogs.com/mininice/p/3914786.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/376745.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

echarts 怎么知道鼠标点击的哪根柱子

有个需求&#xff0c;点击柱子&#xff0c;然后得到该柱子的信息&#xff0c;然后展示这个机房的时序图。 第一步卡住了&#xff0c;就是不知道如何获取柱子的序号。后参考&#xff1a;https://blog.csdn.net/zt_fucker/article/details/72461572?utm_sourceblogxgwz1 得到思路…

Oracle经典sql语句总结@sql-plus重点函数串讲与sql语句案例@中文排序详讲).doc

1.经典的select sql语句 //注意&#xff1a;包含空值的数学表达式求出的结果为空值 SQL> select salcomm from emp; //连接员工编号与员工姓名这两个字段 SQL> select empno||ename as "员工编号和员工姓名" from emp; //查询去掉重复行的员工部门编号 SQL>…

C++模板简单分析与举例

C模板简单分析与举例 #pragma once #include <iostream> /*/ C 模板 /*/ /* --- 函数模板 --- */ /// 声明 template <typename T1, typename T2> void TFunc(T1, T2); /// 一般定义 template <typename T1, typename T2> void TFunc(T1, T2) { std::cout &l…

flash builder4.7 for Mac升级AIRSDK详解

使用flash builder 打包ANE时或者打包ipa时候常常会遇到AIRSDK版本低的问题&#xff0c;然而flash builder4.7默认使用的AIRSDK是3.4而flash builder4.7 中 Flex SDK中默认的AIRSDK是3.1,大家可能有疑问怎么有二个AIRSDK。我的理解是Flex SDK中的AIRSDK是低版本&#xff0c;低版…

echarts formatter鼠标悬停显示信息

由于echarts中柱状图&#xff0c;鼠标放上去默认显示的是x轴名称以及y轴值。 而我现在需要再添加一些显示信息。 下面是操作&#xff1a; 在tooltip对象中补充trigger: “axis”,属性&#xff0c;然后再设置formatter。 tooltip : {formatter: function (params) {// do some …

codeforces 261 D

题目链接&#xff1a; 解题报告&#xff1a;给出一个序列a1,a2,a3.........an&#xff0c;f(i , j ,x) ak 等于x的个数(i < k < j)&#xff0c;令i < j&#xff0c;求有多少对 i 和 j 使得 f(1,i,ai) > f(j,n,aj)。 从左往右扫一遍这个序列&#xff0c;num1[i] 等于…

javascript下漢字和Unicode編碼互轉代碼

近日在為網站做一資料功能&#xff0c;這些顯示在頁面上面的文字數據都是存放在js文件裏面的&#xff0c;由於這些js文件裏面的中文都是經過unicode編碼的&#xff0c;頁面上顯示是沒有問題的&#xff0c;問題是我做的網站是繁體中文&#xff0c;而js文件裏面的中文數據是簡體中…

python 线程异步执行踩坑

有个需求&#xff0c;一个线程在得到n个数据之后&#xff0c;异步地执行一个子线程函数&#xff0c;在子线程函数中完成数据库的打开、写入数据、关闭操作。在子线程函数返回前父线程先返回结果。 在此之前&#xff0c;先导入我们需要的模块&#xff1a; from concurrent.futu…

关于window.history.back()后退问题

Windows下的window.history.back()后退后返回的不仅仅是前一个页而是前一个页的状态。假设一个页我改动了3次那必须后退3次才干回到前一个页。并且数据库中删除的数据依旧显示在上面感觉很的不有用。 解决的方法&#xff1a;history.back()后再加一个reload()这样就能够回到刷新…

每日英语:Smog Levels in Hong Kong Hit Highs

Hong Kong’s pollution levels hit nearly decade-level highs this week, sending locals scurrying inside and obscuring the city’s skyline behind a blanket of white. scurry&#xff1a;急跑&#xff0c;急赶    In the city’s central business district, road…

转载 | pymysql.err.InterfaceError: (0, ‘‘)解决办法

导致这个错误的原因是通过pymysql连接MySQL&#xff0c;没有关闭连接的操作&#xff0c;所以短时间内不会出问题&#xff0c;长时间保持这个连接会出现连接混乱。虽然看着自己的代码没错&#xff0c;还是会报 pymysql.err.InterfaceError: (0, ‘’)错误。所以这个连接要么连上…

不使用物理引擎,自己动手做真实物理的模拟投篮游戏

最近打算做一个2D投篮游戏&#xff0c;由于对于BOX2D等物理引擎并不熟悉&#xff0c;加之一开始低估了游戏所需要的碰撞检测复杂度&#xff0c;认为仅仅涉及4面墙&#xff0c;篮球&#xff0c;篮板&#xff0c;篮筐&#xff0c;篮网的碰撞检测并不复杂。因此决定自己实现所需要…

GoldenGate DDL双向复制

继续上一篇的实验。 节点说明&#xff1a; dd1(源库)--->>kf2(目标库) dd1(目标库)<<---kf2(源库) 在配置反向复制过程中&#xff0c;可暂时把源库和目标库调换位置&#xff0c;配置基本上雷同。 但在官网上有说明要注意的一个地方&#xff1a; Do ei…

转载|pymysql.err.InternalError: Packet sequence number wrong - got 45 expected 0

原文链接&#xff1a;https://www.cnblogs.com/heiao10duan/p/9373237.html 原因&#xff1a; 使用了多线程&#xff0c;多线程共享了同一个数据库连接&#xff0c;但每个execute前没有加上互斥锁 方法&#xff1a; 方法一&#xff1a;每个execute前加上互斥锁 lock.acquire…

JSF入门

1. 简介 JSF技术是Sun公司在2004年发布的用于开发Web应用的框架。当前版本是2.2&#xff0c;由JSR344规范定义。它是Java EE 7推荐的Web标准框架。Mojarra(https://javaserverfaces.java.net/)是Oracle官方采用的JSF的参考实现&#xff0c;其他的参考实现还有Apache基金的MyFac…

nyist 488 素数环

有一个整数n&#xff0c;把从1到n的数字无重复的排列成环&#xff0c;且使每相邻两个数&#xff08;包括首尾&#xff09;的和都为素数&#xff0c;称为素数环。 为了简便起见&#xff0c;我们规定每个素数环都从1开始。例如&#xff0c;下图就是6的一个素数环。 这题在进行判断…

Android System分区大小异常

平台&#xff1a;Freescale &#xff0f; Android 4.2.2 问题描述&#xff1a; 用 df 命令&#xff0c;看到/system分区大小275M。 用 busybox fdisk -l /dev/block/mmcblk0p5&#xff0c;看到 536M。 Freescale的刷机工具是Mfgtool&#xff0c;分区的动作在mksdcard-android.s…

python数据库连接池使用

在转载|pymysql.err.InternalError: Packet sequence number wrong - got 45 expected 0这一篇中&#xff0c;我使用了方法一。接下来试试方法三&#xff0c;方法三和方法二其实意义差不多&#xff0c;但是对于数据库的连接并不是交由程序员管理而是交由连接池管理了&#xff0…

.Net入门-部署问题

学习一门新的语言难免会遇到各种各样的问题&#xff0c;总结一下。 测试环境&#xff1a;windows2008serverIIS7 开发环境: vs2010 问题1&#xff1a;"Unrecognized attribute targetFramework. Note that attribute names are case-sensitive. " 分析&#xff1a; 开…

pymysql.err.OperationalError: (1203, “User root already has more than ‘max_user_connections‘ active

max_connections 是指MySQL服务器的最大连接数。即所有用户最大连接数的和。 max_user_connections 是指MySQL中单个用户的最大连接数。 这里说明当前用户的连接数大于了单个用户的最大连接数&#xff0c;需要扩大连接数&#xff1a; mysql> show variables like %connect%…