又到每個月的15號了,現在avalon已經固定在每個月的15號發布新版本。這次發布又帶來許多新特性,讓大家寫碼更加輕松,借助於“操作數據即操作DOM”的核心理念與雙向綁定機制,現在越來越多人加入到avalon的陣營中來。此外,基於avalon的UI庫OniUI也越來越強大,很快,樹組件也開發完畢,下星期也與大家見面了。到時,OniUI也有兩個Grid組件,一個樹組件的完整UI庫。與本次發布的UI還有驗證組件,mask組件,百葉窗切換組件……
UI庫的廣告就到時為止,我們看一下新版本帶來的新特性與FIX BUG情況吧。
- 【新特征】ms-duplex綁定全面升級,脫胎換骨,如avalon.duplexHooks鈎子對象,pipe內部方法。詳看這里的例子。
- 【新特征】添加data-include-replace輔助指令 詳見這里
- 【新特征】data-duplex-changed支持第二個參數data詳見這里
- 【新特征】VM的$fire通信機制變成這個樣式, all!xxx是不依賴於DOM樹向周邊VM發出通知; up!xxx與down!xxx是依賴於DOM向上方或向下方的VM發出通知,我們可以return false中止廣播; 普通的xxx只能觸發當前的VM的$watch回調。
- 【新特征】添加avalon.scanCallback,允許在某次掃描后觸發這些回調。詳見這里與這里的例子
avalon.scanCallback = function(fn, group) { group = group || "$all" var array = scanObject[group] || (scanObject[group] = []) array.push(fn) } avalon.scan = function(elem, vmodel, group) { elem = elem || root group = group || "$all" //.....略 }
- 【優化】修正 $fire在跨模塊通信時無法通知widget組件的BUG(添加了createSinalTower內部方法)
- 【優化】更改innerRequire內部方法的位置,及設置為空函數,方便用戶移除“AMD加載器模塊”后也能正常使用
- 【優化】精簡IE6-8下input事件的模擬
- 【優化】精簡 newSetter的邏輯詳見這里
- 【優化】fix HTMLInputElement.prototype.value 的重寫
- 【優化】重構notifySubscribers
- 【優化】fix getEachProxy BUG 詳見這里
- 【優化】支持生成更多SVG元素
- 【優化】為對付firefox插件下嚴格的語法檢測,使用全新的獲取全局變量window的方法
- 【優化】修正 ms-src不能加載SWF BUG詳見這里
- 【優化】修正ms-duplex 綁定VM某個子VM的屬性,input值修改后沒有同步到vm.$model的BUG 詳見這里
- 【優化】修正avalon.mix方法拷貝VBScript對象時拋錯的BUG 詳見這里
- 【優化】修正IE6下因為for in循環導致isPlainObject不准的BUG 詳見這里
- 【優化】將ms-if去掉的元素都移動head標簽的avalon標簽下詳見這里
- 【優化】讓date過濾器能像chrome那樣支持更多日期格式詳見這里
本次升級主打的是ms-duplex 2.0,大家可以到這里一窺其強大!ms-duplex2.0相對於舊的ms-duplex只能將element.value簡單地同步到VM中,它添加了自動轉換類型的功能(核心庫),光標引導(avalon.mask),數據格式化(參看avalon.mask的第三個例子,將用戶輸入內容自動插入千分符),驗證機制(avalon.validation)。
第二大新特性就添加了avalon.scanCallback這新方法,允許用戶在掃描后進行操作。有了這東西,什么data-include-rendered, data-repeat-rendered, data-with-rendered就沒有存在的必要了。以后它們內部全部用avalon.scanCallback實現。
從1.3.3起,我就着手開發靜態收集依賴機制,以此為契機,發現許多要改良的地方,全部放到一個叫avalon.$events.js的版本上。但經過幾個月的研究,發現靜態收集依賴,是對壓縮不友好的,像angular那樣需要引入許多奇異的方式來規避這問題。因此我最終放棄這東西,以后改用其他方式提高性能。未來將着力升級三柱臣與avalon.observe.js。
三柱臣,動畫mmAnimate,數據請求mmRequest,路由器mmRouter,現在就mmRequest最成熟,而mmRouter的需求則強烈,mmAnimate極需升級。它們三個都依賴了mmPromise,那是原生的Promise的一個包裝,性能超好。
在chrome36 beta中,就已經存在element.animate這個方法,即引進了著名的web-animation。chrome39將進一步完善。新的mmAnimate也將基於它進行開發。
迷你MVVM框架在github的倉庫https://github.com/RubyLouvre/avalon
avalon的新UI庫地址OniUI, 多達42個UI,強大的換膚功能
朋友們用avalon做的東西