avalon是一個簡單易用迷你的MVVM框架,它最早發布于2012.09.15, 為解決同一業務邏輯存在各種視圖呈現而開發出來的。 事實上,這問題其實也可以簡單地利用一般的前端模板加jQuery 事件委托 搞定, 但隨著業務的膨脹, 代碼就充滿了各種選擇器與事件回調,難以維護。 因此徹底的將業務與邏輯分離,就只能求助于架構。 最初想到的是MVC,嘗試過backbone,但代碼不降反升,很偶爾的機會,碰上微軟的WPF, 優雅的MVVM架構立馬吸引住我,我覺得這就是我一直尋找的解決之道。
avalon將所有前端代碼徹底分成兩部分,視圖的處理通過綁定實現(angular有個更炫酷的名詞叫指令), 業務邏輯則集中在一個個叫VM的對象中處理。我們只要操作VM的數據,它就自然而然地神奇地同步到視圖。 顯然所有神秘都有其內幕,C#是通過一種叫訪問器屬性的語句實現,那么JS也有對應的東西。 感謝上帝,IE8最早引入這東西(Object.defineProperty),可惜有BUG,但帶動了其他瀏覽器實現它, IE9+便能安全使用它。 對于老式IE,我找了好久,實在沒有辦法,使用VBScript實現了。
Object.defineProperty或VBS的作用是將對象的某一個屬性,轉換一個setter與getter, 我們只要劫持這兩個方法,通過Pub/Sub模式就能偷偷操作視圖。為了紀念WPF的指引, 我將此項目以WPF最初的開發代號avalon來命名。 它真的能讓前端人員脫離DOM的苦海,來到數據的樂園中!
Avalon中文官網:http://avalonjs.github.io/
Avalon中文社區:http://www.avalon.org.cn/
Avalon神器入門教程:http://www.cnblogs.com/vajoy/p/4063824.html
基于avalon的組件庫-OniUI:http://ued.qunar.com/oniui/index.html#!/widgets