M.js 是文叔來加入小米之後,和團隊一起整起來的一套開發架構,其實沒有什麼創新之處,更多是為了方便開發的同時使得前端的代碼量降低。之前用jQ試過,但jq的一個包就80K 著實讓人有點受不了。
M.js的大小一直維持到20K左右,體積小就意味著功能弱,這是必然了。特別是在沒有一個良好的架構前提下,更是這樣。或許換句話說M.js也許就是有些同學經常所說的僅僅是一些方法的堆砌而且,所以M.js本不應該拿出來炫耀,更不能拿來誤人子弟了。但文叔還是覺得M.js也並非完全的一無是處,各位看官且聽某一一道來。
首先,要說是的核心。M.js的核心其實很簡單,在我看來就那麼幾個重要的方法:
- M.template 模版方法
- M.extend 繼承
- M.Object M.js的原始Class,它提供了M.js裡最常用,也算是最核心的事件驅動機制。
- M.override class擴充或叫方法覆蓋。
除了以上幾個最主要的,還有一些常用的工具方法,某就不一一表述了。後面某要跟大家重點介紹下第2、第3和第4。
其次,M.js裡面當然有一些必不可少的東西,那就是對Dom元素的操作,這個稱之為M.js的Element。M.Element提供了對DOM元素的常規操作,比如html方法擷取或設定dom元素的innerHTML等。當然M.Element是繼承自M.Object,等等,這裡為嘛要繼續自M.Object呢?後吧,再埋個坑後面再說。在M.js裡面如果你想產生一個新的元素,可以選擇這樣玩:
new M.Element("div",{ html:'this is html' , id:'id' , events: { click:function(){ alert(this.html() )} } }).appendTo("body")
上面這句就在body下產生了一個新div元素,並且當點擊這個div的時候會彈出裡面的內容。
最後,M.js必需得提供Ajax的封裝啊。所以就有了 M.Net.ajax 。ajax當然是為了方便處理ajax請求的了。
好吧,總結上面埋的幾個坑。第一是為什麼有M.Object,貌似就是一個完全無用的廢物啊。當然文叔設計這玩意不是拿來做擺設用啊。
M.Object實際上提供了一套事件驅動機制,你可以對M.Object進行監聽任意一個事件,當M.Object的發生了這個事件後就可以執行你的回調。你可以就像對dom元素監聽事件一樣監聽M.Object。
M.extend ,就是為了讓你能方便擴充M.Object,以M.Object為基類,構建你的業務模型。
至於M.override正如我上面所述,你可以對M.Object進行方法覆蓋,當你覺得某個Class的方法不合適的時候就可以用這貨把原來不合適的覆蓋掉,當然你也可以拿來擴充能力用。