本版本对循环绑定做了巨大改进,感谢@soom, @limodou, @ztz, @Gaubee 提供的大量测试文件。
- fix scanNodes, 在循环绑定(ms-each)扫描元素节点时必须 nextTick,否则旧式IE会忙碌不过来。
- fix ms-css ,旧式IE style[name] = value, 当value为NaN ,不带单位或不是数值什么会抛异常,需要try catch。
- 旧式IE下有些元素的innerHTML是只读的, 因此不能一律使用innerHTML,并且有些元素的生成,如script标签是不会执行,为此我引入新的parseHTML模块来处理此事。
- fix AMD 加载因为手误进错分支的BUG
- fix scanExpr bug, 它在IE10有时会多生成一个绑定对象,异致不渲染错误。
- 重构Collection内部对象与ms-each绑定,引入“事务”的概念,让其插入节点时更加智能高效。
我们看最后一条,我们可以类似纯JS操作为内存操作,DOM操作为IO操作,执行一万次前者所需的时间可能还比不上一次后者的。DOM操作的开销就是这么大。有的DOM操作还会引起reflow,这危害更大。因此明智的做法就是将要操作的节点移出DOM树。更好的办法是,此多个DOM操作合成一个,全部在文档碎片中搞完才插入DOM树。
我们看下面的注解:
< div ms-controller = "box" >
?????? < div ms-each-el = "array" id = "aaa" >
??????????? < p >{{$index}}----{{el}}</ p >
?????? </ div >
</ div >
avalon.define("box", function(vm) { ??????? vm.array = [1, 2, 3, 4, 5]
}) ? ?? ?实现过程 当扫描到div#aaa 将div#aaa的所有子节点复制一份到文档碎片vTemplate ? ?执行begin命令,将vTemplate复制一个空的文档碎片vTransation( cloneNode(false) ), 设置全局变量flagTransation = true; ? ?? ????? 开始循环数组
??? ????? 执行insert命令
???? 将vTemplate复制一个文档碎片vEl( cloneNode(true) ),?
将对应的子VM与它进行扫描
免责声明: 本文仅代表作者个人观点,与爱易网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
|