框架中是否应该实现作用域前缀取值的功能

50 views
Skip to first unread message

Gaubee

unread,
Sep 29, 2013, 4:07:54 AM9/29/13
to f2...@googlegroups.com
题目可能有些拗口,具体是这样的,当初开始设计框架时,想到的是一般的插值绑定:
{{title}}


title是冒泡获取的,就跟js的作用域一样,不过当初想到添加这样的功能,方便写UI控件:
{{$THIS.title}}

这样的前缀(可配置)是不冒泡获取的,如果当前的对象没有这个字段就是空,不再向父级对象取相同的字段,比如说each:
<h2>{{title}}</h2>
{{#each list}}

   {{#if $THIS.title}}
    <h3>{{title}}</h3>
  {{/else}}
    <span class="error">UNKONWN</span>
  {{/if}}

{{/each}}

还有with(其实就是单个的each)、layout(插入其它模板,Tree-UI就会用到,循环引用自身)
同时我也加入了$PARENT、$TOP分别来访问父级、最顶级的对象。

但问题在后期开发过程中渐渐暴露,内核代码可维护性差,我实在想不出有什么更好的设计模式可以维护它实现的结构(双向绑定、数据冒泡更新、散发更新等问题都和这东西直接耦合),更关键是我一直在思考到底有没有实现这个的必要,这种东西是否应该框架的使用者自己解决数据内部的逻辑?而不是应该由框架的开发者来实现这些比较少用得到的,或者说不是很必要的功能?

麻烦大家提一点建议,谢谢

Mark Zhou

unread,
Sep 30, 2013, 4:44:52 AM9/30/13
to Gaubee Bangeel, f2...@googlegroups.com
首先感谢楼主的认真回复。

楼主提到了三个例子都是专做MV*库 其中也包含了模版引擎。 

不知道楼主是否也借鉴了几个专做的template的库 (mustache handlebars等)其中有些倡导的是logic less的原则 (the less the more) 他们的原生就不支持这些关键字(parent top)但提供了接口 用户可以自己注册自定义方法

希望这能给楼主一些启发。

另外我之前也看了一篇linkedin当初是如何从茫茫模版引擎(10多种主流)中选择了他们现用的 文章,其中有些考虑和智慧 对设计楼主的库 应该也能有所帮助 (链接我回去找找)

另关于楼主提到的特点我不敢苟同。我不觉得学习其他的模版引擎有什么代价(个人观点)
属性绑定 视图绑定 不太清楚具体这些库实现的区别所在 有待我之后学习

最近支持楼主继续开发,早日开放1.0版本 同时期待更好的documentation

在 2013年9月30日星期一,Gaubee Bangeel 写道:
其它模板引擎,比如说Emberjs,之前看过相关的一个帖子,但是社区太小,找不出来,我记得是用一些特殊的声明在html元素的属性中才得以实现。angularjs采用的则是类似的写法{{$parent.arrribute}}这样。国内的像avalon则是用类似Emberjs一样的声明,在HTML元素中声明controller对象,从而取值(不得不说这样对html结构严重依赖,灵活性低)。

我昨天试着总结了一下,https://github.com/gaubee/blog/issues/38 里面讲述到了我的想法。认为还是要把这功能加进去。

至于这个框架的特点,我设计的初衷就是“自由”,现在MV*框架对使用者写法的约束过大,API一堆。我则是倡导书写自由,我只提供你最符合逻辑的写法,就像jQ一样直观的操作元素,只要做的就是get、set,和其它库自由穿插,智能识别依赖,自动触发更新。属性绑定和视图绑定使用同一套模板语法,基本没有学习代价。
这个库是Ember、Angular、avalon三个框架的合体,以书写自由为核心的折中方案。

但现在在改动内核,设计新的内部绑定的协议,暂时不能使用。之前有释放出一个版本在Github上,基本功能可以正常使用,但玩不起混乱的作用域绑定,新的内核就是要解决这个问题,还有解决自动识别依赖中的循环依赖调试的问题,并且优化渲染方案。


在 2013年9月30日上午11:30,Mark Zhou <mrma...@gmail.com>写道:
楼主是否研究过目前市面流行的模版引擎库呢 不知道他们是如何处理的呢?

另一个个人问题,你的这个库较之别的那些 特点是什么?谢谢


2013/9/29 Gaubee <gaubee...@gmail.com>

--
您收到此邮件是因为您订阅了 Google 网上论坛的“鬼懿IT”论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到 f2er+uns...@googlegroups.com
通过以下网址访问此论坛:http://groups.google.com/group/f2er。
要在网络上查看此讨论,请访问 https://groups.google.com/d/msgid/f2er/0d22f76f-8433-42c7-8122-3f82b38cb79f%40googlegroups.com。
要查看更多选项,请访问 https://groups.google.com/groups/opt_out。


Reply all
Reply to author
Forward
0 new messages