Skip to content

Releases: RubyLouvre/avalon

1.3.9.1

27 Jan 16:20
Compare
Choose a tag to compare

1.4之前的最后一个版本

重构parseHTML,isArrayLike, fix ms-on-*, ms-duplex的一些小bug,大幅重构loader

1.3.9

27 Jan 16:24
Compare
Choose a tag to compare
  • 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

27 Jan 16:31
Compare
Choose a tag to compare

1.3.8的急紧修复版

  • 让ms-text, ms-html支持过滤器,方便在首屏渲染时不出现插值表达式
  • fix ms-html延迟扫描的BUG
  • 重构modelFactory

1.3.8

27 Jan 16:33
Compare
Choose a tag to compare

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

27 Jan 16:39
Compare
Choose a tag to compare

命途多舛的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

27 Jan 16:45
Compare
Choose a tag to compare

主要是重构 parseHTML及将所有属性合并到ms-attr-*的后遗症

  • 处理tr元素插入caption元素的BUG
  • addClass没有进行trim操作的BUG
  • fix ms-value不等同于 ms-attr-value BUG
  • .css() 设置background时不再自动转换backgroundColor

1.3.7

21 May 09:35
Compare
Choose a tag to compare
  • 【新特征】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

21 May 09:37
Compare
Choose a tag to compare
  • 【新特性】添加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的配置项,详见这里

0.9

15 Apr 10:22
Compare
Choose a tag to compare
0.9

0.84
0.85

  • 重新使用082的scanNodes方法,因为有关旧式IE下UI渲染锁死的问题已经解决了。
  • 优化each绑定与Collection
  • 添加CSS3 animationend事件支持
  • 添加ms-with绑定
  • fix IE9-10获取option元素的value的BUG
  • 改良 AMD加载器与jQuery这些在内部使用了全局define方法的库的兼容问题
  • 抽象setNumber方法来处理splice,slice这两个数组方法的参数
  • 分割Configue, AMDLoad, DomReady等模块,让框架的可读性更强