成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

從 BackboneJS 的源碼開(kāi)始說(shuō)事件模型

z2xy / 471人閱讀

摘要:最終期待的參數(shù)是事件名稱(chēng),回調(diào)函數(shù),回調(diào)函數(shù)上下文,最終期待的參數(shù)是事件名稱(chēng),回調(diào)函數(shù),回調(diào)函數(shù)上下文,最終期待的參數(shù)是時(shí)間名稱(chēng),。

為什么要事件模型

先從 BackboneJS 開(kāi)始說(shuō)起。BackboneJS 設(shè)計(jì)的比較好的一部分代碼就是事件相關(guān)的內(nèi)容,傳送門(mén):
http://backbonejs.org/docs/backbone.html#section-13

jQuery 里面用到最多的就是bind相關(guān)的操作,為一個(gè)按鈕綁定點(diǎn)擊事件,給他解綁一個(gè)事件或者解綁所有事件,這一類(lèi)的事件都是面向Dom對(duì)象。富應(yīng)用中還需要一類(lèi)孤立于DOM的事件,他們也需要類(lèi)似添加事件、刪除事件、解綁事件和觸發(fā)事件。例如監(jiān)測(cè)URL的變化,在其他地方可能綁定了很多事件,但是真實(shí)變化的時(shí)候只需要觸發(fā)一下邊能執(zhí)行所有方法。

事件模型的代碼

最終我自己框架里面寫(xiě)的事件很大部分參考了 BackboneJS ,具體代碼傳送門(mén):
https://github.com/vincenting/HaiyiYun/blob/master/src/vintjs.js#L175

主要的功能包括綁定 on ,解綁 off ,觸發(fā) trigger 。on 最終期待的參數(shù)是(事件名稱(chēng),回調(diào)函數(shù),回調(diào)函數(shù)上下文),off最終期待的參數(shù)是(事件名稱(chēng)[,回調(diào)函數(shù)][,回調(diào)函數(shù)上下文]),trigger 最終期待的參數(shù)是(時(shí)間名稱(chēng)[,args...])。但是為了靈活,還需要一些靈活的參數(shù),例如時(shí)間名稱(chēng)允許是多個(gè)事件名稱(chēng)以空格分開(kāi),以及以對(duì)象的形式同時(shí)傳入名稱(chēng)和回調(diào)函數(shù)。于是 BackboneJS 中使用了eventsApi 進(jìn)行統(tǒng)一的處理。

題外話-內(nèi)存潔癖

Javascript 里面寫(xiě)[]實(shí)際上是 new Array,因此很容易無(wú)意中產(chǎn)生很多使用很臨時(shí)的列表對(duì)象,例如一些臨時(shí)列表,作為參數(shù)使用 apply 傳遞給函數(shù)。對(duì)于一個(gè)列表來(lái)說(shuō),最快的清空方法就是修改他的length,如下

var arr = [1,2,3,4];
arr.length = 0;
console.log(arr);

之后 arrObj 內(nèi)容便會(huì)被釋放。這樣的對(duì)象可以多次使用,但是非臨時(shí)的變量一定不能使用。原因如下:

var arr = [1,2,3,4];
var new_list = arr;
arr.length = 0;
console.log(new_list[0]);

相同的 Object 也可以運(yùn)用類(lèi)似的方法來(lái)重復(fù)使用。這些都是為了盡量減少對(duì)象的新建,頁(yè)面一直開(kāi)著什么情況都有可能發(fā)生,其他對(duì)象也是如此,字符串、函數(shù)、正則對(duì)象。

可能用到事件的地方

之前有提到的url變化的時(shí)候會(huì)觸發(fā)事件,這些事件可能包括去尋找對(duì)應(yīng)的路由并解析,對(duì)當(dāng)前狀態(tài)存在的事件統(tǒng)一解綁,刪除Dom等等。

控制器間的通信也會(huì)用到事件模型。一個(gè)控制器中觸發(fā)了一個(gè)事件,然后事件被觸發(fā)去和其他控制器通信。

數(shù)據(jù)和視圖的綁定也需要使用事件。一個(gè)數(shù)據(jù)更新了調(diào)用什么方法去更新視圖,一個(gè)列表刪除或者添加數(shù)據(jù)了又去調(diào)用什么方法去更新視圖。

還有就是系統(tǒng)內(nèi)部的解耦等等。

完成事件之后就需要去監(jiān)聽(tīng)url的變化并且解析,以及一些類(lèi)似于后臺(tái)的url處理方法。(更新待續(xù))

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/77921.html

相關(guān)文章

  • 給自己挖個(gè)坑,開(kāi)始去開(kāi)發(fā)javascript富應(yīng)用框架

    摘要:是目前項(xiàng)目中正在用的框架。現(xiàn)在前端這塊再次到了這樣的瓶頸,所以決定自己開(kāi)始開(kāi)發(fā)和維護(hù)自己的一個(gè)框架。不強(qiáng)制綁定,但是會(huì)制定其他規(guī)則來(lái)避免用戶手動(dòng)請(qǐng)求。項(xiàng)目目前完成板塊事件綁定及觸法地址處理以及路由處理。 為什么要框架 隨著電腦運(yùn)算能力的不斷提升,越來(lái)越多的網(wǎng)站開(kāi)始將一些數(shù)據(jù)處理,簡(jiǎn)單的業(yè)務(wù)邏輯交予前端。于是前端,特別是所謂的 Webapp 中,出現(xiàn)了大量的數(shù)據(jù)處理以及業(yè)務(wù)邏輯,前端的...

    lidashuang 評(píng)論0 收藏0
  • 富應(yīng)用中 URL 管理以及 Javascript 測(cè)試

    摘要:一個(gè)是使用錨鏈接,即的方式實(shí)現(xiàn)。做程序的人大多了解測(cè)試。傳統(tǒng)的測(cè)試方法就是在完成后手動(dòng)去觸發(fā)事件,然后手動(dòng)輸入來(lái)檢測(cè)是否得到預(yù)期的效果。引入了測(cè)試框架后工作簡(jiǎn)單了很多。前篇傳送門(mén)給自己挖個(gè)坑,開(kāi)始去開(kāi)發(fā)富應(yīng)用框架從的源碼開(kāi)始說(shuō)事件模型 URL 存在的意義在于使用者可以使用一段字符串就可以找到對(duì)應(yīng)的資源。富應(yīng)用中的內(nèi)容改變都是通過(guò) Javascript 去改變文檔內(nèi)容,某種角度上來(lái)說(shuō)整個(gè)...

    kid143 評(píng)論0 收藏0
  • Backbone.js學(xué)習(xí)筆記(一)

    摘要:它通過(guò)數(shù)據(jù)模型進(jìn)行鍵值綁定及事件處理,通過(guò)模型集合器提供一套豐富的用于枚舉功能,通過(guò)視圖來(lái)進(jìn)行事件處理及與現(xiàn)有的通過(guò)接口進(jìn)行交互。 本人兼職前端付費(fèi)技術(shù)顧問(wèn),如需幫助請(qǐng)加本人微信hawx1993或QQ345823102,非誠(chéng)勿擾 1.為初學(xué)前端而不知道怎么做項(xiàng)目的你指導(dǎo) 2.指導(dǎo)并扎實(shí)你的JavaScript基礎(chǔ) 3.幫你準(zhǔn)備面試并提供相關(guān)指導(dǎo)性意見(jiàn) 4.為你的前端之路提供極具建設(shè)性的...

    FrancisSoung 評(píng)論0 收藏0
  • 【譯】JavaScript 框架探索與變遷(上)

    摘要:正文在年,框架的選擇并不少。特別的,通過(guò)思考這些框架分別如何處理狀態(tài)變化是很有用的。本文探索以下的數(shù)據(jù)綁定,的臟檢查的虛擬以及它與不可變數(shù)據(jù)結(jié)構(gòu)之間的聯(lián)系。當(dāng)狀態(tài)產(chǎn)生變化時(shí),只有真正需要更新的部分才會(huì)發(fā)生改變。 譯者言 近幾年可謂是 JavaScript 的大爆炸紀(jì)元,各種框架類(lèi)庫(kù)層出不窮,它們給前端帶來(lái)一個(gè)又一個(gè)的新思想。從以前我們用的 jQuery 直接操作 DOM,到 Backb...

    Jaden 評(píng)論0 收藏0
  • Redux、Flux、Vuex

    摘要:結(jié)構(gòu)和數(shù)據(jù)流一個(gè)單向數(shù)據(jù)流是模式的核心,上面示圖應(yīng)該是程序員心中主要的模型圖。 前言 這篇文章不會(huì)用具體的代碼去闡述redux、flux或者vuex,因?yàn)槲矣X(jué)得它們所帶來(lái)的更是一種編程思想。 前端進(jìn)化和框架演變 在很久以前,前端沒(méi)有MVVM的概念,MVVM是對(duì)MVC細(xì)化的說(shuō)法(個(gè)人覺(jué)得兩者區(qū)別不大),MVC的模式一直在后臺(tái)使用,效果和優(yōu)點(diǎn)都很明顯。 后來(lái)前端工程師仿照MVC模式開(kāi)發(fā)了很...

    joy968 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<