你們能夠在倉庫中看到,多出了一個叫avalon.observe的東西,它是基於Object.observe,dataset, Promise等新API實現。其中,它也使用全新的靜態收集依賴的機制,這個機制也完成得差很少,所以avalon與avalon.mobile下一版將會應用這最新成果,進行大改。javascript
着重說一下最後一個新特性。原來定義一個VM大概以下:php
var model = avalon.define("test", function(vm) { vm.firstName = "司徒" vm.lastName = "正美" vm.fullName = {//一個包含set或get的對象會被當成PropertyDescriptor, set: function(val) {//裏面必須用this指向scope,不能使用scope var array = (val || "").split(" "); this.firstName = array[0] || ""; this.lastName = array[1] || ""; }, get: function() { return this.firstName + " " + this.lastName; } } vm.click = function() { alert(vm.firstName) } vm.$watch("firstName", function() { alert(vm.firstName) }) vm.arr = ["aaa", 'bbb', "ccc", "ddd"] vm.selected = ["bbb", "ccc"] vm.checkAllbool = vm.arr.length === vm.selected.length vm.checkAll = function() { if (this.checked) { vm.selected = vm.arr } else { vm.selected.clear() } } }) model.selected.$watch("length", function(n) { model.checkAllbool = n === model.arr.size() })
如今還能夠這樣定義:java
var model = avalon.define({ $id: "test", firstName: "司徒", lastName: "正美", fullName: {//一個包含set或get的對象會被當成PropertyDescriptor, set: function(val) {//裏面必須用this指向scope,不能使用scope var array = (val || "").split(" "); this.firstName = array[0] || ""; this.lastName = array[1] || ""; }, get: function() { return this.firstName + " " + this.lastName; }, }, click: function() { alert(model.firstName) }, arr: ["aaa", 'bbb', "ccc", "ddd"], selected: ["bbb", "ccc"], checkAllbool: true, checkAll: function() { if (this.checked) { model.selected = model.arr } else { model.selected.clear() } } }) model.checkAllbool = model.arr.length === model.selected.length model.$watch("firstName", function() { alert(model.firstName) }) model.selected.$watch("length", function(n) { model.checkAllbool = n === model.arr.size() })
迷你MVVM框架在github的倉庫https://github.com/RubyLouvre/avalongit
官網地址http://rubylouvre.github.io/mvvm/github
avalon的新UI庫地址OniUI, 多達34個UI,強大的換膚功能web
朋友們用avalon作的東西chrome