Releases: RubyLouvre/avalon
Releases · RubyLouvre/avalon
1.3.9.1
1.4之前的最后一个版本
重构parseHTML,isArrayLike, fix ms-on-*, ms-duplex的一些小bug,大幅重构loader
1.3.9
- ms-html内部不再使用异步
- head元素中的avalon元素加入ms-skip指令
- 重构计算属性,现在超级轻量化
- 重构CG回收,不会每次都全部检测所有绑定对象
- 重构内部方法isArrayLike,更好的判定非负整数
- 重构number过滤器
- 重构widget的节点回收,去掉onTree方法
- 重构Collection内部工厂
- 重构modelFactory, 现在VM.$event.$digest开启异步刷新视图功能
- 重构offsetParent
- 重构ms-repeat,不再触发多余的回调
- 针对IE下 MutationObserver 会撕碎文本节点BUG, 添加 mergeTextNode 内部方法
- 优化短路与, 短路或的处理逻辑
- 支持CommonJS和AMD和单文件三种方式引用,支持通过bower命令加载avalon
- avalon.modern.js遗漏了 parseJSON补上,并且修正parseJSON的逻辑与原生的JSON.parse保持一致
- 去掉所有与scanCallback相关的定时器
本次升级带来的最大的特性是$digest
在之前的版本,如果我们对VM的某个监控属性连续地改动,每次改动都立即同步到视图,并触发对应的$watch回调。
<!DOCTYPE html>
<html>
<head>
<title>TODO supply a title</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width">
<script src="avalon.js"></script>
<script>
var vm = avalon.define({
$id: "test",
aaa: 111
})
vm.$watch("aaa", function(v) {
console.log(v)
})
vm.aaa = 1
vm.aaa = 2
vm.aaa = 3
</script>
</head>
<body ms-controller="test">
{{aaa}}
</body>
</html>
控制台会依次输出1,2,3
<!DOCTYPE html>
<html>
<head>
<title>TODO supply a title</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width">
<script src="avalon.js"></script>
<script>
var vm = avalon.define({
$id: "test",
aaa: 111
})
vm.$events.$digest = true
vm.$watch("aaa", function(v) {
console.log(v)
})
vm.aaa = 1
vm.aaa = 2
vm.aaa = 3
</script>
</head>
<body ms-controller="test">
{{aaa}}
</body>
</html>
这时只输出一次,这对于一些类似于mousemove的频繁操作非常有利,大大提升性能。
最近一朋友用avalon做的一个使用avalon的模板项目。https://github.com/pinghe/seedfrontend
此原型项目展示了:
- 支持cordova、browser应用,即同一套代码可用于桌面浏览器和各类手机应用。
- 使用avalon MVVM框架
- 使用cordova 用于移动端
- 使用requirejs amd模块加载器
- 使用gulp构建系统
- 展示了页面切分和逻辑模块划分(html、css、js),及如何根据实际切换模块。适用团队分工合作
- 页面路由技术,页面转换的有限状态机应用。
- 支持js、coffee脚本
- 支持css、less、sass 文件
- 支持三种应用场景,浏览器,移动app
- 支持生产环境,即可将js合并压缩成单个js文件,优化css文件,优化html文件
- 支持DevOps
这是另一个朋友用avalon搭建后台系统的心得,《使用mvvm框架avalon开发公司内部运营管理系统的一些心得》
1.3.8.1
1.3.8的急紧修复版
- 让ms-text, ms-html支持过滤器,方便在首屏渲染时不出现插值表达式
- fix ms-html延迟扫描的BUG
- 重构modelFactory
1.3.8
avalon1.3.8主要是在ms-repeat、 ms-each、 ms-with等循环绑定上做重大性能优化,其次是对一些绑定了事件的指令添加了roolback,让其CG回收更顺畅。
- 重构ms-repeat、ms-each、ms-with, 内部的代理对象全部使用普通的对象实现, 并且一个监控数组只对应一个代理VM数组,从而大量减少VM的数量。
- avalon不再使用scanCallback实现内部各种rendred回调,改成checkScan方法。详看这里的例子。
- fix parseHTML在旧式IE下动态生成tr元素,多添加了caption元素的BUG
- getEachProxy方法在ms-repeat, ms-duplex混合使用时,清空数组,某一部分元素无法同步的BUG
- fix IE6-9下addClass没有对类名进行trim操作的BUG
- fix 短路与,短路或引发的收集依赖失败的BUG
- 重构scanAttr, fix ms-repeat与ms-css, ms-data共存而漏扫的问题
- avalon.modern.js去掉HTML Imports的实现,收拾大写变小写引发的BUG
- fix date filter BUG
- fix 内部onTree BUG,可能会引起死循环,详见这里
- fix html filter,详见 这里
- 优化 CG回收 ms-if ms-hover ms-active 都加上rollback方便移除绑定
- onTree在触发里面的事件时,针对change blur事件需要对document.activeElement进行检测
- 修正ms-class中的占位符的生成方式
- 修正avalon.fn.data取某些对象属性时被序列化的BUG
- 修正IE6-8下ms-css-float BUG
- 优化 计算属性,它再也不用收集视图刷新函数与更新视图了
- ms-repeat、 ms-each、 ms-with现在完全按照供销渠道那一套来写了, 所有代理VM的产生、消费、回收,存放通过xxxProxyFactory、xxxProxyAgent、 recycleProxies、xxxProxyPool实现。详见这里
1.3.7.3
命途多舛的1.3.7
- 主要是修改ms-duplex BUG。尝试使用使用selectionchange dragend 等事件监听老版IE input元素的value变动(涉及到点击X时清空,粘贴,剪切, 中文输入法问题)
- 自带加载器text!插件去掉 HTML Imports实现,因为它不能原样输出
- fix ms-widget与ms-data同时存在时,ms-data被忽略掉的BUG
1.3.7.2
主要是重构 parseHTML及将所有属性合并到ms-attr-*的后遗症
- 处理tr元素插入caption元素的BUG
- addClass没有进行trim操作的BUG
- fix ms-value不等同于 ms-attr-value BUG
- .css() 设置background时不再自动转换backgroundColor
1.3.7
- 【新特征】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那样支持更多日期格式详见这里
1.3.6
- 【新特性】添加avalon.isFunction方法,不用多说,大家都知道怎么用,但在IE6-8与W3C下,它的实现是不一样的。待会儿说。
- 【新特性】添加data-duplex-focus辅助指令, 当ms-duplex位于文本域,密码域,文本区上,添加了此指令,会自动获取焦点,光标位于最后的文本后。详见这里。
- 【新特性】ms-duplex-*添加数据转换功能。详见这里。
- 【优化】重构sanitize过滤器,详见这里这里。
- 【优化】重构html绑定,将会导致内存泄漏的replaceNodes替换掉,这里。
- 【优化】重构if绑定,将会导致内存泄漏的msInDocument、ifSanctuary、 placehoder属性移除掉,详见这里。
- 【优化】重构repeat绑定,将会导致内存泄漏的startRepeat、 endRepeat、 parent、callbackElement属性移除掉,原template属性改成为一个字符串。详见这里。
- 【优化】重构modelFactory,通过静态分析收集监控属性与计算属性及函数间的依赖关系,$watch回调的存放数组与视图刷新函数的存放数组合而为一,详见下面commit 简化计算属性、 监控数组的订阅数组 对函数内部的监控属性进行依赖收集。
- 【优化】重构avalon.contains,IE6-8下,对游离于DOM树外的文本节点,访问其parentNode,有时会抛错。详见这里。
- 【优化】提高cacheExpr的缓存命中率,详见这里。
- 【优化】重构IE6-8下设置元素透明度,待会儿讲。
- 【警告】重构avalon.Array.ensure的行为,通过返回值是数字还是undefined判定其是否已经添加新元素,详见这里。
- 【警告】废弃dettachVModels的配置项,详见这里。