上周学习了新的javascript框架Ember,接下来将这个框架与backbone做一些简单比较,同时做一些总结
一.个人感觉Ember相对于Backbone具有更高的灵活性:
1.Backbone只支持对Model和View的拓展,并且个人感觉Collection这个类的设定很鸡肋
2.Ember不仅支持对Model的拓展,还另支持对Control等其他类的拓展,即使在定义之后也可以通过方法对类进行修改。
创建实例的方式也不仅仅是通过对类的实例化,可以在没有类的情况下直接创建一个实例
二.Ember的灵活也有是有代价的,比如它的封闭性
1.Ember提供了创建命名空间的接口
2.Ember只能使用自己的JS引擎模板,而不是像backbone一样可以更换JS引擎模板。并且Ember的JS引擎模板的语法也比较奇怪
三.Ember也有一些弊端(个人认为)
1.Ember对DOM操作事件绑定是以inline的方式,比如:
<a href="#" title="view again" {{action "searchAgain" target="App.recentUsersController"}}>{{this}}</a>
其中action代表需要调用的方法名,而target代表action方法所属的类,默认为click事件
这样不是违背了MVC的初衷了,增加了可维护性的难度?
而backbone的类则是在View中init中就已经定义的,没有这样的问题
四.其他
1.backbone和ember都具有同步和监听的功能,技能视图绑定的model数据改变了,视图能自动更新,并且可以监听某个属性的值是否改变,并且为此改变添加回调函数。但是ember做的更为强大,能同步的不仅仅是数据,可以计算出一些attribute和class
目前只有想到这么多,有需要的话会随时补充
虽然以上总结是对ember缺陷描述较多,但是仍然还是认为ember比backbone更为强大,更灵活,具体情况还是视具体项目而定
另有一篇文章可以参考
http://net.tutsplus.com/tutorials/javascript-ajax/game-on-backbone-and-ember/