迷你MVVM框架 avalonjs 沉思录 第1节 土耳其开局

#cnblogs_post_body p{
text-indent:2em; margin-top: 1em;
}

正如一切传说的开端那样,有一远古巨神开天辟地,然后就是其他半神喧宾夺主。我们对最巨贡献与创建力的远古巨神懵懂不知,却对巫师们的话语津津乐道。这同样也是我们前端的现实。

MVVM是来自.NET,另一个遥远的界域。前端,相对于后端,怎么看都是蛮夷之地。JS这个肩负着前端一切交互工作的语言,竟然被视为恶魔,屡屡被屏蔽禁用。些微可用的脚本,变量与函数没有组织地野蛮生长着,直到JAVA的传教士为它带来类与库。

很长一段时间,人们把类看作是福音。明知这是两种不同语言,
正如Christ你怎么念也念不成“基督”,因此真正与类配套使用的接口怎么也推销不出去,更甭论什么设计模式,IOC了。

没有办法,人口太少了,想点技能树,必须要到达某一上限。这经历了Prototype与jQuery这两个阶段,尤其是后者,前端终于有足够人力来研究加载器,MVC,MVP,路由器这些非常炫的东西,MVVM只是这潮流的一部分。

我们合计一下时间,JS前十年(1995-2005)在干什么了,基本上什么也没有,而同期JAVA在诞生后,在大公司的支持下高唱猛进,忙着做自己的标准库。其他出名的语言也差不多这样,标准库基本立即进入里程。而JS刚出生就被山寨(JScript),此外被受到VBScript,
ActionScript的威胁。

第二个时期比较很短,2005-2008,
那时世界发生大事了,伟大的DDH大神创建了rails,而作为rails的子项目Prototype.js立马把JS界那些小喽罗吓呆了。占领了80%市场的Prototypejs无论是在语言底层或DOM上都有大量建树,降低了入门门槛。这像盛唐之前的隋朝一样,打下很好的架子。同期,JAVA的Spring打遍天下无敌手。

第三时期,是jQurey引衔的。这个不用多展开,野心膨胀的JSer开始玩其他语言的人玩剩的东西了。模块化,加载器,MVC,各种字眼满天飞。MVC在一两年内跑马灯时换了好几代,先是javascriptMVC,然后是backbone,与.NET进得近的人还知道有个叫knockout的东西,ruby的大神跨界过来搞ember,2013年人们也听到一个叫angular的高富帅框架,其爹是谷歌,于是2014年就基本是它的新闻了。就像jQuery初期,我们知道有mootools这样有力的竞争对手,现在都不知哪里去。

这是一个新旧交替的时期,代表DOM操作的极致的jQuery与想隐藏DOM操作的MVVM框架发生冲突了。不禁让我想起了《土耳其开局》的影评——

那是一场发生在葵地里的战争,华丽得让人目眩:漫无边际的一片金黄色的向日葵,身着土黄色的俄军士兵,头戴红帽身着蓝色军服的土军士兵,双方在向日葵里时隐时现,相互追杀,枪炮的硝烟遮蔽了湛蓝的天空。

那也是一场古典的战争,发生在两个没落强国之间的战争,都有着华丽的外表。因为他们都身处欧洲的边缘,已有了华丽的军服,先进的枪炮;两个欧洲曾经的霸主,现在已是强弩之末,战争只能靠人来堆积,所以是用现代的武器所打的冷兵器之战。

双方在巴尔干及黑海之间,你来我往,打得还颇热闹。一共打了二百多年,一直打到第一次世界大战,两国之间的战争大的就有十一次之多,影片中所描写的战争大约应该是第十次俄土之战了。至此以后,强大的奥斯曼帝国走向衰亡,取得胜利的沙皇俄国在一战之中也迅即倒塌。

……

时下的jQuery可以看作是土耳其的化身,它是可以自豪,如同土耳其以它那口径则高达30英寸(约合762mm)的乌尔班巨炮征服君士坦丁堡一样,振聋发聩。

angular是沙俄,财大气粗,暴兵极快, 比虫族更加虫族。

但DOM操作终归要退居幕后,无论你做得多好多精,而jQuery也像进化到尽头,最后在github上没什么大动作了。

而angular虽然如日中天,但它最大的要害始终没有解决——上手难。在浮燥的前端界,JSer的忠诚度是极其低。可能昨天鼓吹backbone的那帮人,今天就是angular的免费水军。

时局难料,纷战不已,这样一个时代有着无尽的可能性。未来的王者可能在这边角上虎视眈眈。
它继承了远古巨神的衣钵,虽然不像其他半神那样恬噪,但也会发出自己的声音。那是远离尘世的乐土,avalon。它在悄悄积聚着自己的力量。

如果您觉得这文章对您有帮助,可以打赏点钱给我,鼓励我继续写一些高质量的博文


迷你MVVM框架 avalonjs 沉思录 第1节 土耳其开局,布布扣,bubuko.com

时间: 2024-12-20 03:49:23

迷你MVVM框架 avalonjs 沉思录 第1节 土耳其开局的相关文章

迷你MVVM框架 avalonjs 沉思录 第3节 动态模板

模板的发明是编程史上的一大里程碑,让我们摆脱了烦锁且易出错的字符串拼接,维护性大大提高. 都在JSP,ASP时代,人们已经学会使用include等语句,将多个页面片断拼接成一个页面. 此外,为了将数据库中的数据或业务中用到的变量输出到页面,我们需要将页面某个地方标记一下,将变量塞到里面去. 最后,出于方便循环输出一组数据,就需要将each语句从HTML里撕开一道口子,加上其他什么if语句,页面上其实变撕裂成两部分 一种是与后端语言相近的逻辑部分,一个是够为纯净的HTML部分,到最后,模板引擎就发

迷你MVVM框架 avalonjs 沉思录 第2节 DOM操作的三大问题

jQuery之所以击败Prototype.js,是因为它自一开始就了解这三大问题,并提出完善的解决方案. 第一个问题,DOM什么时候可用.JS不像C那样有一个main函数,里面的逻辑不分主次.但JS是这样玩,并不意味着DOM也是这样.被JS自由惯了的人,于是傻眼了. 这涉及一个时间的概念.牛顿与爱因斯坦的差别,也是在于这个时间的引入.我们的脚本并不是一下子就引入,页面也不是一下加载完毕.前者引发脚本加载管理问题,后者就是DOMReady这个概念的导入.页面是从上到下生成,除了样式或图片在浏览器的

迷你MVVM框架 avalonjs 入门教程(司徒正美)

迷你MVVM框架 avalonjs 入门教程 关于AvalonJs 开始的例子 扫描 视图模型 数据模型 绑定属性与动态模板 作用域绑定(ms-controller, ms-important) 模板绑定(ms-include) 数据填充(ms-text, ms-html) 类名切换(ms-class, ms-hover, ms-active) 事件绑定(ms-on,……) 显示绑定(ms-visible) 插入绑定(ms-if) 双工绑定(ms-duplex) 样式绑定(ms-css) 数据绑

迷你MVVM框架 avalonjs 1.3.1发布

avalon1.3.1发布. interpolate支持注释节点做定界符,avalon.config({interpolate:["<!--","-->"]}) 监控数组添加pushArray方法,类似于push方法,不过参数是一个数组 data-duplex-changed回调会在第一次赋值就触发 添加一配置项,调整ms-repeat的对象池的大小,avalon.config({maxRepeatSize:30}) 迷你MVVM框架在github的仓库

迷你MVVM框架 avalonjs 1.3.2发布

时隔一个月,avalon的新版本终于出来了,本次更新带来强大的模块间通信机制,其他就往常一样FIX BUG. 在文本绑定里,IE会对流离于DOM树外的文本节点的data属性赋值报错,需要添加一层判定 派发事件的逻辑,由DOC.createEvent("Event")必成DOC.createEvent("Events") 添加一个反XSS的过滤器sanitize 重构事件系统,暴露eventHooks对象 firefox添加对mousewheel的兼容支持 升级ms-

迷你MVVM框架 avalonjs 1.3.3发布

这应该是1.3X系列最后一个版本了,大家可以在仓库中看到,多出了一个叫avalon.observe的东西,它是基于Object.observe,dataset, Promise等新API实现.其中,它也使用全新的静态收集依赖的机制,这个机制也完成得差不多,因此avalon与avalon.mobile下一版将会应用这最新成果,进行大改. fix IE6-8下直接修改表单元素值不触发data-duplex-changed回调的BUG, 详见这里 chrome浏览器对文本域进行Ctrl+V操作,会触发

迷你MVVM框架 avalonjs 1.3.5发布

本版本主要是修复内存泄漏问题,让其在移动端更好的运作. 修正visible BUG 详见这里 修正$fire方法里的正则错误 详见这里 修正ms-attr BUG,在IE9-11,直接用element.setAttribute("value","xxx")还是不能同步到element.value 详见这里 修正ms-class BUG,现在ms-hover对应的属性发生变成,类名也能跟着变了详见这里 修正avalon.modern的AMD加载器的onerror触发逻

迷你MVVM框架 avalonjs 1.3.8发布

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在

迷你MVVM框架 avalonjs 1.3.7发布

又到每个月的15号了,现在avalon已经固定在每个月的15号发布新版本.这次发布又带来许多新特性,让大家写码更加轻松,借助于"操作数据即操作DOM"的核心理念与双向绑定机制,现在越来越多人加入到avalon的阵营中来.此外,基于avalon的UI库OniUI也越来越强大,很快,树组件也开发完毕,下星期也与大家见面了.到时,OniUI也有两个Grid组件,一个树组件的完整UI库.与本次发布的UI还有验证组件,mask组件,百叶窗切换组件-- UI库的广告就到时为止,我们看一下新版本带来