`

【YUI源码分析】模块管理&名字空间

    博客分类:
  • YUI
阅读更多

1 ,关于名字空间:

       YUI 对于名字空间的实现,其实只是使用 YAHOO.namespace() 来创建对象。对于 YUI 而言就是创建了一个全局对象,

       比如:

       SINOSOFT={};

       SINOSOFT.util={};

这样的方式来区别定义名称。

      YAHOO.namespace() 方法源码:

// 其实返回什么不重要了,主要是已经创建了对象。

YAHOO.namespace = function() {

    var a=arguments, o=null, i, j, d;

    for (i=0; i<a.length; i=i+1) {

        d=(""+a[i]).split(".");

        o=YAHOO;

        // YAHOO is implied, so it is ignored if it is included

        for (j=(d[0] == "YAHOO") ? 1 : 0; j<d.length; j=j+1) {

            o[d[j]]=o[d[j]] || {};

            o=o[d[j]];

        }

    }

    return o;

};

// 按照上面的方法,可以用两种方法来声明 YAHOO.namespace(“widget.util”);

//YAHOO.namespace(“widget ”,”util”); 
 

 

       2 ,关于模块管理:

       YUI 的架构设计相当的强大,将最底层的一些通用调用的函数封装一个文件里面 yahoo-dom-event.js ,并且将模块之间的依赖尽量控制在最少,且将一些不是很常用可是通用的函数放在 utility 模块里面。当使用某种特性的时候只需引入所需文件即可。

       使用这样的方法来解决模块依赖问题。

       因为 YUI 的名字空间是使用创建对象这样的方式来实现,就会出现这样一种情况。当使用多个版本的 YUI 框架的时候,可能覆盖了以前的方法。

       所以就出现了 YAHOO.register() 这样的方法来进行控制且运行想要的代码。通过对 module 进行注册,注册的时候且同时保留模块的版本信息,来解决多个版本之间的冲突。

    

    YUI 的框架信息以及浏览器信息都存在名字空间 YAHOO.env

YAHOO.register = function(name, mainClass, data) {

    var mods = YAHOO.env.modules, m, v, b, ls, i;

 

    if (!mods[name]) {

        mods[name] = {

            versions:[],

            builds:[]

        };

    }

    m  = mods[name];

    v  = data.version;

    b  = data.build;

    ls = YAHOO.env.listeners;

 

    m.name = name;

    m.version = v;

    m.build = b;

    m.versions.push(v);

    m.builds.push(b);

    m.mainClass = mainClass;

 

    // 此处是模块注册的时候,顺便注册了其监听器

    for (i=0;i<ls.length;i=i+1) {

        ls[i](m);

}

 

    // label the main class

     if (mainClass) {

        mainClass.VERSION = v;

        mainClass.BUILD = b;

    } else {

        YAHOO.log("mainClass is undefined for module " + name, "warn");

    }

};
 

YAHOO.env 数据结构

YAHOO.env = YAHOO.env || {

    /**

     * Keeps the version info for all YUI modules that have reported themselves

     * @property modules

     * @type Object[]

     */

    modules: [],

    /**

     * List of functions that should be executed every time a YUI module

     * reports itself.

     * @property listeners

     * @type Function[]

     */

    listeners: []

}; 
 

 

学到一个编程的小技巧:

比如类似出现:

  e=e?e:window.event; 这样的代码。

  或者是

   if(e==null)   e=window.event;

可以简化成e=e||window.event

 

以上个人浅见,有错误欢迎指正。

 

分享到:
评论

相关推荐

    yui 3.1.2 源码 6MB大小 0资源分

    YUI3 源码 非compress版 YUI3 源码 非compress版 YUI3 源码 非compress版

    YUI compressor源码jar包

    雅虎提供的js压缩工具包,包含源码及jar包

    Yahoo JavaScript库 YUI源码

    Yahoo JavaScript库 YUI,非常有名的免费开源代码库

    从YUI2到YUI3看前端的演变 pdf

    YUI3 引入了粒度更细的模块管理方式,通过异步 HTTP 请求加载模块、然后执行回调来加载和使用模块。现场有很多人提出疑问,大家无非关心的是“效率”二字。个人以为在现阶段,这种方式有一点激进,否能为广大用户所...

    rgb彩色空间到yui彩色空间转换系统

    该程序用vc++语言,实现彩色图像的rgb空间到yui空间的转换,主要对bmp彩色位图。

    yui 资源包

    yui 源码下载,3.9.0 r2 包,最新版本

    YUI 入门教程YUI 入门教程YUI 入门教程

    YUI教程YUI 入门教程YUI 入门教程YUI 入门教程

    yuicompressor-yui compressor

    yuicompressor-2.4.2.jar yuicompressor-2.4.7.jar jsZip.exe yuicompressor yui compressor js压缩工具 javascript压缩工具 css压缩工具 ------------------------------------ //压缩JS java -jar yui...

    yui_2.9.0前端UI

    YUI 库,全称Yahoo! UI Library。是一组工具和控件,用JavaScript写成, 为的是用DOM 脚本,DHTML和AJAX等技术创建丰富的网页交互式应用程序。 YUI 基于BSD协议,对所有的使用方式都是免费的。YUI 项目包括YUI 库和两...

    yui3-master.zip

    yui3-master.zip

    雅虎 用户接口库YUI

    YUI资料 雅虎 用户接口库 中文说明及如何使用学习 Yui组件分成2类:工具包和控件库 Yui 工具包 Yui 工具包利用DOM脚本来简化浏览器内的开发(in-browser devolvement),使用DHTML和AJAX的特性开发所有的Web程序。...

    [pdf]Jquery1.2.6源码分析

    jQuery 是一个非常优秀的 JS 库,与 Prototype,YUI,Mootools 等众多的 Js 类 库相比,它剑走偏锋,从web开发的实用角度出发,抛除了其它 Lib中一些中看 但不实用的东西,为开发者提供了优美短小而精悍的类库。其使用...

    yuitest YUI测试工具

    YUI Test is a complete testing framework for JavaScript and Web applications. You can use the simple JavaScript syntax to write unit tests that can be run in web browsers or on the command line, as ...

    基于java的开发源码-JSCSS压缩工具 YUI Compressor.zip

    基于java的开发源码-JSCSS压缩工具 YUI Compressor.zip 基于java的开发源码-JSCSS压缩工具 YUI Compressor.zip 基于java的开发源码-JSCSS压缩工具 YUI Compressor.zip 基于java的开发源码-JSCSS压缩工具 YUI ...

    yui_2.6.0r2

    yui_2.6.0r2 yui_2.6.0r2 yui_2.6.0r2 yui_2.6.0r2 yui_2.6.0r2

    yui.rar 例子

    yui的例子,左中右3个模块 ,非常简单的例子

    Jquery1.2.6 源码分析

    jQuery是一个非常优秀的JS库,与Prototype,YUI,Mootools等众多的Js类库相比,它剑走偏锋,从web开发的实用角度出发,抛除了其它Lib中一些中看但不实用的东西,为开发者提供了优美短小而精悍的类库。其使用简单,文档...

    yuicompressor,给YUI Compressor添加右键命令

    YUI Compressor非常好用,特别是JS的混淆是众多JS Coding的最爱。可惜官网提供的版本都不具备右键功能,每次压缩都要cmd输入一些命令实在是繁琐,本文就介绍如何给YUI Compressor添加右键命令,方便使用。 网上已有...

    YUI中文文档CHM

    YAHOO YUI 中文文档 AJAX 详细 比较好用

    js 压缩YUI

    雅虎的东西,简单的操作很好用 使用例子:java -jar D:\yuicompressor\yuicompressor\yuicompressor.jar E:\js\all.js -o E:\wap\wap2\js\all-min.js --charset utf-8 当然要装jdk了 不然就玩完了

Global site tag (gtag.js) - Google Analytics