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