迷你MVVM框架 avalonjs 0.8发布
本版本最重要的特性是引进了AMD规范的模块加载器,亦即原来mass Framework 的并行加载器, 不同之处,它引进了requirejs的xxx!风格的插件机制,比如要延迟到DOM树建完时触发,是使用ready!, 要加载css文件是使用css!css_path。
加载器在移动设备或PC的单页应用不可或缺。根据公司内容的不完全统计,手机等浏览器的性能只是PC的十分之一左右,而且测试对象还是公司的有钱同事的手机,什么IP,三星GALAXY。
在过去的一周,整合angular, requirejs遇到各种困难,最后只能到github下载了一个整合好的应用来修改。由于没有整合的能力,意味着我们的angular就不能随意升级了。因此深感自带加载器的重要性。当然加载器一直是微博遇到的一些朋友所热切盼望的功能。因为要同时同步两个不是自己能掌控的项目,实在心绞力竭。
现在avalon项目下,除了avalon.js外,还有一个叫avalon.mobile.js的东西,它是avalon.js的优化版,专门使用HTML5时代出现的新属性构建,不再兼容旧式IE,IE的支持版本为IE10,这就保证移动设备上也能流畅运行。
比如hasClass, addClass, removeClass, toggleClass在avalon.js是这样实现的
hasClass: function(cls) {
var el = this[0] || {}
if (el.nodeType === 1) {
return !!el.className && (" " + el.className + " ").indexOf(" " + cls + " ") > -1
}
},
addClass: function(cls) {
var node = this[0]
if (cls && typeof cls === "string" && node && node.nodeType === 1) {
if (!node.className) {
node.className = cls
} else {
var a = (node.className + " " + cls).match(rnospaces)
a.sort()
for (var j = a.length - 1; j > 0; --j)
if (a[j] === a[j - 1])
a.splice(j, 1)
node.className = a.join(" ")
}
}
return this
},
removeClass: function(cls) {
var node = this[0]
if (cls && typeof cls > "o" && node && node.nodeType === 1 && node.className) {
var classNames = (cls || "").match(rnospaces) || []
var cl = classNames.length
var set = " " + node.className.match(rnospaces).join(" ") + " "
for (var c = 0; c
到avalon.mobile则是这样实现:
hasClass: function(cls) {
var el = this[0] || {}
return el.nodeType === 1 && el.classList.contains(cls)
},
addClass: function(cls) {
var el = this[0]
if (cls && typeof cls === "string" && el && el.nodeType === 1) {
cls.replace(rword, function(c) {
el.classList.add(c)
})
}
return this
},
removeClass: function(cls) {
var node = this[0]
if (cls && typeof cls > "o" && node && node.nodeType === 1 && node.className) {
cls.replace(rword, function(c) {
node.classList.remove(c)
})
}
return this
},
toggleClass: function(value, stateVal) {
var state = stateVal,
className, i = 0
var classNames = value.match(rnospaces) || []
var isBool = typeof stateVal === "boolean"
var node = this[0] || {}, classList
if (classList = node.classList) {
while ((className = classNames[i++])) {
state = isBool ? state : !classList.contains(className)
classList[state ? "add" : "remove"](className)
}
}
return this
},
attr方法在这两个版本的实现也不一样,avalon.mobile.js用到了dataset。
data: function(name, value) {
name = "data-" + hyphen(name || "")
switch (arguments.length) {
case 2:
this.attr(name, value)
return this
case 1:
var val = this.attr(name)
return parseData(val)
case 0:
var attrs = this[0].attributes,
ret = {}
for (var i = 0, attr; attr = attrs[i++]; ) {
name = attr.name
if (!name.indexOf("data-")) {
name = camelize(name.slice(5))
ret[name] = parseData(attr.value)
}
}
return ret
}
},
//----------------------------------------------------------
avalon.data = function(name, val) {
var dataset = this[0].dataset;
switch (arguments.length) {
case 2:
dataset[name] = val
return this
case 1:
val = dataset[name]
return parseData(val)
case 0:
var ret = {}
for (var name in dataset) {
ret[name] = parseData(dataset[name])
}
return ret
}
}
avalon.mobile.js甚至尝试用hidden实现visible绑定
if (typeof DOC.createElement("div").hidden === "boolean") {
bindingHandlers.visible = function(data, vmodels) {
var elem = data.element
watchView(data.value, vmodels, data, function(val) {
elem.hidden = !val
})
}
}
未来的展望,接着眼于下来的0.9版本,将尝试加强国际化的支持与对数组元素的深层监控, avalon.mobile将尝试使用webworker, 然后发布正式版1.0!!!!!!!!!!
迷你MVVM框架在github的仓库https://github.com/RubyLouvre/avalon
官网地址http://rubylouvre.github.io/mvvm/
迷你MVVM框架 avalonjs 0.8发布的更多相关文章
- 迷你MVVM框架 avalonjs 0.95发布
迷你MVVM框架 avalonjs 0.95发布 本版本最主要的改进是ms-with 深层绑定的实现,至少,avalon1.0所有重要的feature已经开发完毕,之后就是小补小漏,性能优化了. ms ...
- 迷你MVVM框架 avalonjs 0.85发布
迷你MVVM框架 avalonjs 0.85发布 本版本对循环绑定做了巨大改进,感谢@soom, @limodou, @ztz, @Gaubee 提供的大量测试文件. fix scanNodes, 在 ...
- 迷你MVVM框架 avalonjs 0.82发布
迷你MVVM框架 avalonjs 0.82发布 本版本最大的改进是启用全新的parser. parser是用于干什么的?在视图中,我们通过绑定属性实现双向绑定,比如ms-text="fir ...
- 迷你MVVM框架 avalonjs 0.99发布
在本版本主要是性能优化,添加一些有用的功能(如回调什么的),离成品阶段不远了. 修正 updateViewModel bug 修正监控数组的set方法 bug 添加data-each-rendered ...
- 迷你MVVM框架 avalonjs 0.9发布
本版本最大的改进是引进了ms-with绑定,现在可轻松遍历对象了. 改进列表如下: 重新使用082的scanNodes方法,因为有关旧式IE下UI渲染锁死的问题已经解决了. 优化each绑定与Coll ...
- 迷你MVVM框架 avalonjs 0.91发布
本版本修了一些BUG与不合理的地方,感谢感谢ztz, 民工精髓, 姚立, qiangtou等人指正. 处理AMD加载 旧式IE下移除script节点内存泄漏的问题 fix firefox 全系列vis ...
- 迷你MVVM框架 avalonjs 0.92发布
本版本最大的改进是引入ms-class的新风格支持,以前的不支持大写类名及多个类名同时操作,新风格支持了.还有对2维监控数组的支持.并着手修复UI框架. 重构 class, hover, active ...
- 迷你MVVM框架 avalonjs 0.93发布
这段时间吸取@limodou, @东灵等人的意见,做了以下改进 重构isArrayLike,提高avalon.each的性能,原来avalon.each是依赖于isArrayLike来判定是循环普通对 ...
- 迷你MVVM框架 avalonjs 0.94发布
本版本主要做了如下改进: 优化ms-if的逻辑,现在描述DOM的顺序是 ms-skip, ms-important, ms-controller, ms-if ... 只要元素存在ms-skip 这个 ...
随机推荐
- windows服务器安装telnet的方法指引
摘要: 1.telnet是一种网络排查的工具 2.当发现一台服务器异常的时候,通常有两个cmd命名做排查 3.ping 服务器ip,看网络是否联通 4.telnet 服务器ip 端口 看该服务器指定端 ...
- fedora、centos、rhel安装Adobe Flash Player 28
切换到root用户 添加Adobe Repository Adobe Repository 32-bit x86 rpm -ivh http://linuxdownload.adobe.com/ado ...
- 《Effective C++》 目录:
转自:http://blog.csdn.net/KangRoger/article/details/44706403 目录 条款1:视C++为一个语言联邦 条款2:尽量以const.enum.inli ...
- [LOJ 2146][BZOJ 4873][Shoi2017]寿司餐厅
[LOJ 2146][BZOJ 4873][Shoi2017]寿司餐厅 题意 比较复杂放LOJ题面好了qaq... Kiana 最近喜欢到一家非常美味的寿司餐厅用餐. 每天晚上,这家餐厅都会按顺序提供 ...
- 【CSS】Sass理解
原文在 https://github.com/zhongxia245/blog , 欢迎 star! Sass理解 时间:2016-09-24 22:56:12 作者:zhongxia 这里就不讲解S ...
- Alpha冲刺报告(9/12)(麻瓜制造者)
今日已完成 邓弘立: 正在进行主页逻辑的编写 符天愉: 部署商品发布和物品需求的接口 江郑: 尝试完善接口文档,进行进一步测试 刘双玉: 编写接口说明 肖小强: 进行逻辑模块的编写 李佳铭: 修改了U ...
- node封装mysql操作
前言 node是基于异步的,因此在进行数据库查询操作的通常是通过回调来操作查询结果.但是在有了es7的async/await,基本不再需要回调了,所以本篇是基于async/await对mysql进行一 ...
- C语言编程积累2
版权声明:本文为CSDN博主(天才2012)原创文章,未经博主同意不得转载. https://blog.csdn.net/gzzaigcn/article/details/27113957 寥寥数笔, ...
- 【转】Fiddler工作原理
原文章链接:Web代码网chinabit.org Fiddler是一个http调试代理,它能 够记录所有的你电脑和互联网之间的http通讯,Fiddler 可以也可以让你检查所有的http通讯,设置断 ...
- javascript仿新浪微博图片放大缩小及旋转效果
javascript仿新浪微博图片放大缩小及旋转效果 经常看到新浪微博里有图片放大缩小旋转效果,感觉效果还不错,所以就想试着做一个类似的demo出来,至于旋转对于IE可以用滤镜来解决,标准的浏览器可以 ...