本次升级,avalon改进了许多内部方法,大大提升性能,并且带来异步刷新视图的新功能。
- 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开发公司内部运营管理系统的一些心得》
此外,avalon已经启用新官网。
迷你MVVM框架在github的仓库https://github.com/RubyLouvre/avalon
avalon的新UI库地址OniUI, 多达42个UI,强大的换肤功能
朋友们用avalon做的东西
- 移动应用:读酷
- chrome插件:饭否客户端
- 为知笔记
- 金山WPS office 会员中心
- 稻売儿
- 桑夏资产官网
- 企业级应用:超博CRM客户关系管理系统(帐号:crm_ceo 密码:nncb_ceo)
- uliweb Python框架与avalon的组合示例
- avalon+jQuery实现域名注册查询
- 路由器示例
- 边锋活动页
- 记者考试题
- 基于avalonJS实现的2048游戏
- 墨麒OA (user: linwei, password: 654321)
最近,已经有三个百度部门(百度移动,百度商业,百度推广)在用avalon了,你们也快快加入吧!
1 楼 james_lover 2015-04-28 11:24