发布于 2015-01-27 23:48:17 | 245 次阅读 | 评论: 0 | 来源: 网友投递
RegularJS JavaScript MVC 框架
regularjs是一个基于字符串模板的用于创建数据驱动的组件的类库, 相较于其它同类的基于字符串的模板引擎比如(mustache), regularjs在compile之后数据和dom仍然保持联系, 所以也称之为'live template engine'.
RegularJS v0.3.0 发布,此版本是 v0.0.1 版本以来最大的更新版本,引入了一些新特性:
The default Syntax changed from {{}}
to {}
now. but you can return to old syntax use
Regular.config({END: '}}', BEGIN: '{{'})
Two-way filter is introduced . see reference for detail . It is used to control the flow from view back to model. you can combine it with r-model
to realize some complex binding.
prevent the safe error. like nested undefined error. for example {blog.title}
won't throw' read title of undefined 'error now.
Unified {#include}
and transclude
. see reference for detail. , you can use transclude content in {#include}
now 。
add component.$mute
to disable a component . $inject(false)
to remove component from document. you can use component.$mute(true).$inject(false)
to compeletely remove a component from document now.
... and fixing some bug
看到 regular 的名字就能感受到扑面而来的山寨味,在开始前,我还是要说明下regularjs出现绝对不仅仅是作者的造轮子情绪泛滥的结果
Angularjs从 12年开始开始火爆起来, 数据驱动的业务实现方式也由此深入人心, 它的数据更新策略基于脏检查,在明确内部的生命周期后在数据绑定的使用上是最为灵活的(即这种方式不介意是何种方式促使数据改变,而只关心数据改变的结 果),作者本人以及周围的小伙伴也开始为之着迷. 随着使用的深入, 发现angularjs的强大特性也引出了一些无法攻克的不足:
由于本身生命周期的强约束,难以与其它框架公用
入门容易,深入难 —— 想想directive一个feature就涉及到的 postlink prelink controller compile scope等等概念.
模板的逻辑实现依赖的是directive(ng-repeat, ng-if etc..),即最小逻辑颗粒是节点, 与常规的模板自由度上还是有较大差异.
FOUC(Flash of unstyled content), 因为angular是先通过浏览器(innerHTML)生成了dom,再后置link来产生真正需要的元素,所以会导致内容闪动.regular也没有 完美的解决问题(因为内容仍然是前端render的),但是可以保证进入文档的节点就是预期的节点
除此之外,Angularjs的核心是scope对象, 业务的实现大部分都是在scope上动态添加函数或属性. 也有人提出整个controller的写法缺乏约束性,这个时候angular-classy出现, 它将原本因挂载在scope上的业务逻辑转移到构造函数原型的形式, 减少了灵活度,但是更有约束性, 这也给了regular很大灵感.
在angular大行其道的时期也激励产生了很多框架,比如vue.js、avalon.js、reactive等 等优秀的框架,它们解决了一些问题, 比如avalon.js利用defineProperty实现了数据get-set的代理 并利用VB实现了ie6的兼容(当然数组还是wrap), 但总体来讲基于dom实现的新秀们还是缺少足够的差异化(代码量的减少并不是最核心的部分)