avalon兼容IE6其实没有你们想象的那么困难,主要是知识面上的差异。
像我掌握js, ruby, python, vbscript等多种脚本语言的前提下,一些认为非夷所思的思路其实对我来说也不是什么大事。
退一步说,avalon的各个版本实现双向绑定也不尽然。
avalon1.4.*与1.5.*是使用动态收集依赖,这是从knockout那里学来的。
js语句针对于 = 号,有两种用法
赋值语句, obj.a = 1
取值语句,var b = obj.a
我要做的是就是劫持了这个等号,让它在取值时进行依赖收集,赋值时进行视图更新。这在其他语言中,有settter,getter可用,而在前端,只有IE8只以用set,get语句,Object.defineProperty只能用于元素节点。只有到了IE9及其他高版本W3C浏览器,这个Object.defineProperty才能让我大胆使用。幸好的是,W3C浏览器早就有__defineSetter__,defineGetter__可用。
问题就是IE6-8,我稍微动用了VBScript。 用到VBScript的代码也不超过100行。当然这对于不懂VBScript的人可能是很难的。因此博学是有好处,能拓展你的思维与门路。
其他要兼容IE的处理,比较事件绑定要用attachEvent, dettachEvent啊,监听元素的value值变化要用propertychange事件啊,IE的NodeList不能用Array.property.slice.call来转化啊,这些都有现成方案,兼容起来一点难度也没有,并且合起来也不超过500行代码。
在avalon1.5,我还学习angular那样使用静态分析进行依赖收集,到avalon1.6这个技术已经研习得差不多,到avalon2,由于大量使用虚拟DOM技术与单纯的静态分析依赖,vm就更加轻量,源码里也很少操作DOM了。
只要不怎么操作DOM,针对IE的hack也用得很少,反而,为了性能,avalon是动用了大量的新API,这些HTML5 API所占比例是其他MVVM框架无法比拟的。
路过
刚好之前跟教主扯淡时候说过这个
并写了个大致例子
现成可用不费脑子就来答下
主要是用 Object.defineProperty 就可以搞了
但是对于老版本 IE 这玩意没有
就用VBS来搞了
(这是听正美说的,他的 avalon 我没看过也没用过……)
基本上老的快入土前端的估计到这就明白了
VBS 的 Class 中成员对象可以 Get 和 Set
VBS 的变量值在老 IE 中又可以和 JScript 互通
所以应该是用 VBS 构建 Class 并实例化返回结果就好
而且 IE 的 execScript 函数可以根据语言类型动态运行 code
就能做到动态构建 VBS 代码执行并拿到返回结果
核心原理大致如下:
var code = '' +
'Class MyObject\n' +
' Private px \n' +
' Sub Class_Initialize()\n' +
' px = 1\n' +
' End Sub\n' +
' Public Property Get x\n' +
' alert("Get Value is:" & px)\n' +
' End Property\n' +
' Public Property Let x(nx)\n' +
' alert("Set Value is:" & nx)\n' +
' px = nx\n' +
' End Property\n' +
'End Class\n' +
'Dim obj\n' +
'Set obj = New MyObject';
execScript(code, 'vbscript');
obj.x;
obj.x = 2;
此时 JS 的 obj 对象成员 x
在 set get 时候都可以有 alert hook 的调用
angular 没跟 avalon 一样这么搞是因为
它们压根没有兼容老 IE 的需求
相关推荐
本文通过实例代码给大家介绍了Avalonjs双向数据绑定与监听的实现代码,非常不错,具有参考借鉴价值,需要的的朋友参考下吧
Avalon 接口规范升级到最新3.2版 , 并将其改名为 Avalon- MM ( Avalon Memory Mapped Interface, 以下均简Avalon- MM) 接口规范 ,同时推出新的 Avalon- ST( Avalon Streaming In-terface)接口规范,因此最新的Avalon...
avalon的实现
avalon-logkit.jar avalon-logkit.jar avalon-logkit.jar avalon-logkit.jar avalon-logkit.jar avalon-logkit.jar avalon-logkit.jar avalon-logkit.jar avalon-logkit.jar avalon-logkit.jar avalon-logkit.jar ...
Avalon总线下的PWM IP Core pwm_avalon_interface.rar pwm_source_new.zip
初识Avalon
Avalon接口类型析 描述了 Avalon-MM接口/ Avalon-ST接口
Qsys系统中会使用互联结构,这篇文档是介绍如何使用Avalon-MM Pipeline Bridge
),而且每种框架双向数据绑定的实现方式都不太一致,比如Anguarjs内部使用的是 脏检查 ,而avalon.js内部实现方式的本质是设置 属性访问器 。 这里不打算具体的讨论各个框架对双向数据绑定的具体实现,仅说一下前端...
本项目的宗旨是,在后端就将第一层数据打进页面上,解决SEO问题,前端avalon只是进行绑定对象的重新注入与双向绑定 demo正面的流程 它是用来测试前端avalon与后端avalon的协作 首先在demo目录的test.js中的files数组...
用于网页前端开发的avalon框架,avalon.js
Nios系统的所有外设都是通过Avalon总线与Nios CPU相接的,Avalon总线是一种协议较为简单的片内总线,Nios通过Avalon总线与外界进行数据交换。
fpga的avalon总线规范,学习nios的有用资料
avalon1.4版本js
altera的avalon总线参考手册.
赠送jar包:avalon-framework-impl-4.3.1.jar; 赠送原API文档:avalon-framework-impl-4.3.1-javadoc.jar; 赠送源代码:avalon-framework-impl-4.3.1-sources.jar; 赠送Maven依赖信息文件:avalon-framework-impl...
介绍Avalon-ST总线规范
avalon的jar包 很难下到了 avalon的jar包 很难下到了
Avalon Quest
avalon的js脚本