avalon2.2.1帶來了一些新東西。javascript
avalon是一個比較保守的庫,所以是市面上少數支持IE6的庫。它的理念是操做數據即操做DOM,以工程化的方式來解決瀏覽器兼容性問題。有了babel, webpack, rollup等工具,avalon2.2.1已經用上es6的類,箭頭函數等時髦東西。一味小補小修是跟不上時代的,所以必須有新東西了。vue
此次改動是VM上的。2.2.0帶來了Proxy形態的VM。算上兼容IE6-8的VBScript模態,與爛大街的Object.defineProperty形態,avalon內部有三種方式建立VM。java
avalon2.2正式廢掉$skipArray,只要是$開頭的屬性就不會轉換爲監控屬性。react
VM的世界變成2類生物,非監控屬性與監控屬性。webpack
而後2.2.1帶來了計算屬性,所以世界一分爲三。但監控屬性與計算屬性不是一個普通的訪問器屬性,它們背後還有其餘東西支撐着,這就是自變因子與因變因子。至關於數學的自變量與因變量。它們承擔着與視圖中的指令雙向綁定的任務。固然VM中還有一個叫$watch回調的東西,當VM的屬性值發生變化,這些回調也會被調用,這與指令的行爲同樣,所以它們封裝成Action(操做單元)。es6
var vm = avalon.define({ $id:'test', aaa: 111, $computed: {//計算屬性在這裏集中定義 bbb: function(){return this.aaa+'!!!'},//只讀計算 xxx: {//可寫計算 get: function(){ return this.aaa + this.bbb }, set: function(val){ var arr = val.split(' ') this.aaa = arr[0] this.bbb = arr[1] } } }, //從這裏開始都是非監控屬性 $aa: 222, bbb: new Date ccc: /regexp/, ddd: function(){}, eee: document.body//節點,window,文檔 });
VM的值一變,視圖的某個地方便跟着變化,若是VM的值變得很快,視圖就會有性能問題了。畢竟VM是JS或VBS對象,而DOM是另外一個世界的重型對象。因而2.2.1引入了事務。事務是同步的,比vue, react, ng的異步更新有一個自然的優點,能夠與jQuery等DOM庫完美配合使用。web
對於用戶而言,你們不須要了解什麼自變因子,因變因子與操做單元,那是雙向綁定的核心,被一層層地封入框架內部。你們連直接操做它們的機會都沒有。瀏覽器
不過有了這些東西,avalon的綁定機制終於明晰下來了。之後就能夠努力往TS方向遷移,不斷優化綁定機制,組件機制,構建本身的全家桶了。babel