亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

YUI的模塊化開發(fā)

系統(tǒng) 2307 0

隨著互聯(lián)網(wǎng)應用越來越重,js代碼越來越龐大,如何有效的去組織自己的代碼,變得非常重要。我們應該學會去控制自己的代碼,而不是到最后一堆bug完全不知道從哪冒出來。前端的模塊化開發(fā)可以幫助我們有效的去管理代碼,特別是多人開發(fā)的時候,提高開發(fā)效率。

這篇文章主要介紹YUI模塊化開發(fā)的原理,適合有一定基礎(chǔ)的朋友閱讀,如果對前端模塊化開發(fā)不是很熟的話,可以先看看阮一峰的博文, http://www.ruanyifeng.com/blog/2012/10/javascript_module.html

?

YUI生成模塊的方式是:

YUI.add('module1', function (Y) { ... }, '1.0.0', requires: ['module2']);

YUI 是全局變量,類似于jquery中的$。add方法中第一個參數(shù)是模塊的名稱module1,第二個參數(shù)是一個匿名函數(shù),里面是模塊內(nèi)容,第三個參數(shù)是版本名,第四個requires表示的是模塊的依賴關(guān)系,如上是module1 依賴于module2(即module2要先于module1 執(zhí)行)。

通常每個模塊存放在一個js文件中,文件以模塊名來命名,即模塊module1存放在module1.js 文件中,module2存放在mudule2.js 文件中。

加載模塊module1:

// 加載YUI seed 文件,包含了YUI所有的依賴關(guān)系

<script src = "http://yui.yahooapis.com/3.13.0/build/yui/yui-min.js" ></script>

<script>

  YUI().use('module1', function (Y) { ... });

</script>

下面就分析下上面這行代碼會發(fā)生什么事。

1)YUI 首先會分析module1 模塊存在的依賴關(guān)系,創(chuàng)建一個URL: http://localhost:3000/yui/combo?mudule2.js&module1.js。注意module2.js 在modul1.js 前面。

2)創(chuàng)建動態(tài)script標簽,向服務器端請求js文件

  var script = document.createElement('script');

  script.src = 'http://localhost:3000/yui/combo?mudule2.js&module1.js';

  if(script.readyState) {

    //IE

    script.onreadystatechange = function () {

if (script.readyState == "loaded" || script.readyState == "complete"){

        script.onreadystatechange = null;

        //預留

      }?

    };

  } else {

    //非IE

    script.onload = function () {

      //預留

    };

  }

  document.body.append(script);

3)服務器端檢測客戶端傳來的到請求,解析URL,然后開始尋找module2.js 和 module1.js 兩個js文件,并將兩個文件按順序拼成一個文件,返回給客戶端。最后傳回的js文件內(nèi)容如下:

  //module2.js 中的內(nèi)容

  YUI.add('module2', function (Y) {?Y.module2 = {};?Y.module2.name = 'module2';?}, '1.0.0', requires: []);

  //module1.js 中的內(nèi)容

  YUI.add('module1', function (Y) {?Y.module1 = {};?Y.module1.name = 'module1';?}, '1.0.0', requires: ['module2']);

4)客戶端接受到返回的js,開始解析,即執(zhí)行里面的YUI下的add方法,執(zhí)行過程大致如下:

  YUI.modules = {};

  //module2

  YUI.modules.push(function (Y)?{ Y.module2 = {}; Y.module2.name = 'module2'; });

  //module1

  YUI.modules.push(function (Y) { Y.module1 = {}; Y.module1.name = 'module1'; });

5)解析完成后,自動觸發(fā)步驟2中onload方法(IE中為onreadystatechange方法),下面是步驟2中“預留”處的代碼:

  for(var i = 0, len = YUI.modules.length; i < len; i++) {

    //將模塊中需要export出的api注冊在this下面;this是YUI的一個實例, this = new YUI();

    YUI.modules[i](this);

  }

  //callback 是YUI().use 中的回掉函數(shù)

  //此時模塊解析完成,傳入this參數(shù),在callback 就可以任意調(diào)用module1 和 module2 中輸出的api了

  callback(this);

?

以上是借助YUI對模塊化開發(fā)做一個簡單的介紹,YUI實際的過程比上面要復雜的多。想了解更多可以看YUI官方文檔: http://yuilibrary.com/yui/docs/yui/ 。也可以看看《JavaScript.Patterns》第五章 Sandbox Pattern,里面對這種開發(fā)模式有比較詳細的介紹。

?

---------------剛開始寫博客,很多方面都不足,希望各位志同道合的朋友多提意見~

YUI的模塊化開發(fā)


更多文章、技術(shù)交流、商務合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产在视频线精品视频2021 | 狠狠色伊人亚洲综合第8页 狠狠色综合久久丁香婷婷 狠狠色综合久久婷婷 | 欧美日韩亚洲综合在线一区二区 | 人人做天天爱夜夜爽中字 | 久久久噜久噜久久综合 | 日韩一区二区天海翼 | 999国产高清在线精品 | 国内精品久久久久久久 | 日韩中文欧美 | 在线观看99 | 久久精品国产精品国产精品污 | 99久热在线精品视频播 | 国产伦理久久精品久久久久 | 亚洲免费视频在线 | 日本久久久久亚洲中字幕 | 久久黄色一级视频 | 亚洲精品美女久久777777 | 亚洲12色吧 | 国产成人在线视频 | 日韩中文字幕精品久久 | 中文字幕亚洲综合久久2 | 91麻豆精品 | 美女福利视频一区二区 | 欧美日韩视频在线 | 欧美高清激情毛片 | 国产免费一区二区三区在线观看 | 亚洲黄色在线观看视频 | 四虎永久在线 | 国产亚洲欧美在在线人成 | 国产成人一区在线播放 | 露脸真实国产精品自在 | 国产精品久久久久久久久 | 狠狠色丁香久久婷婷综 | 97总资源| 毛片视频大全 | 女性下面全部视频免费 | 国产精品不卡视频 | 99视频精品全部在线播放 | 色综合成人 | 91精品国产高清久久久久 | 欧美成人全部费免网站 |