knockoutJS使用及分析
首先,为了不要让这篇文章是纯文字的,我去了knockout的官网顺了个logo过来……
官网
之前的学习中碰上了SPA应用,刚好老师使用了学习成本低的KnockoutJS给我们讲解SPA和MV*(MVC,MVVM)应用。
从官网了解基本的API以及基础实例,使用nodeJS,expressJS框架作为后台,前端使用knockoutJS制作了一个虚拟项目。
1、MVVC架构了解—viewmodel
把后端逻辑放到前端处理,前端把view与viewmodel之间绑定,并且对viewmodel的数据进行逻辑处理。而后端则是通过ajax把viewModel和model进行数据交换。(meteor则是进一步,直接在前端操作mongoDB(子数据库),然后子数据库和主数据库会自动进行数据同步)
2、数据绑定
angular的数据绑定是使用脏检查事件。
knockoutJS可以选择为one way ,one time,two way绑定
ko.observalbe:对数据的get和set ko.computed:实时计算数据 applyBindings:对viewmodel进行应用。
data-binding对函数和数据绑定:click\event\value\text等值的绑定
Simple List:ko.observableArray
3、SPA
其实后台并没有太大改变,逻辑依然,只是把页面的处理逻辑交给了前端。让前端更加像一个APP。
SPA:Single Page Application。使用ajax和服务器及数据库交换数据:服务器传输时只需要传输json,不传页面。使界面更加友好。个人感觉KnockoutJS适合开发SPA的原因就是MVVM的模型,多个Page共享同一个ViewModel,使信息传递更加简单。而angular则再进一步,使用Service、directive、controller给一个应用划分好层次,使结构清晰。ps:个人比较喜欢不同的page使用不同的控制器。
4、总结
KnockoutJS把逻辑移到前端后,但个人感觉只是提供一个雏形,而没有像angular一样进一步的给逻辑分层,让逻辑更加清晰,使代码维护更加简单。KnockoutJS仅提供了数据绑定功能实现了ViewModel。而angular则给人感觉实现了前端的MVC分层。
但是无可否认的是,knockoutJS使用的开发思路和jQuery一致,都是先渲染DOM,再操作DOM。因此不需要太大的改变开发思路,导致学习成本没angular那么高。如果作为一个学习理解SPA和MVVM概念的框架,是比较好的。