# bingoJS **Repository Path**: hunanjun000/bingoJS ## Basic Information - **Project Name**: bingoJS - **Description**: bingoJS 是一个前端mvc框架, 支持chorme, firefox, Safari, IE6及以上的, 支持js与模板按需动态加载, 支持前端模块化开发, 支持完美的双向绑定 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 47 - **Created**: 2015-06-11 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 参考文档:[http://bingojs.mydoc.io/](http://bingojs.mydoc.io/) 库包下载:[https://git.oschina.net/bingoJS/bingoJS/blob/master/bingo.zip?dir=0&filepath=bingo.zip](https://git.oschina.net/bingoJS/bingoJS/blob/master/bingo.zip) 三种开发规划方式(开发模式)Demo:[https://git.oschina.net/bingoJS/bingoJS/tree/master/demo](https://git.oschina.net/bingoJS/bingoJS/tree/master/demo) ####1、关于bingoJS bingoJS是一个前端MV*开发框架, 提供了前端框架所需基础要素,目前已经支持模块化开发、按需动态加载、完善的双向绑定、依赖注入等;让你在开发只关注业务代码的实现。 ####2、提供MV*开发模式 框架提供前端MV和前端MVC两种开发方式,可以实现轻APP和重APP前端搭建。在轻业务的场景里我们可以使用前端MV实现html和JS分离开发,这样让APP管理会变更清晰更简单;而在重业务的场景里我们需要更进一步细分和规划代码,这时就要使用前端MVC方式开发了,还可能要用到service对数据与业务进一步分离。 `总之前端MV*只是一个代码组织和规划方式,能让以后代码管理(迭代,重构)方便` MV开发模式大概分工: - M层:数据业务层,主要负责与后端数据互交, 提供常用方法,处理常用数据(过滤,组装)业务逻辑,这里只需要用到action; - V层:主要处理html以双向绑定语法,跟action数据连接 MVC开发模式大概分工: - M层:数据业务层,主要负责与后端数据互交, 提供常用方法,处理常用数据(过滤,组装)业务逻辑; - C层:控制器, 主要管理action跟V层一一对应, 根据V层显示处理相应的数据 - V层:主要处理html以双向绑定语法,跟C层的action数据连接 ![MVC关系](https://static.oschina.net/uploads/img/201505/15225353_hp0I.png "MVC关系") ####3、双向绑定(数据绑定) 如果MVC是一种开发模式,可以对开发规范和思维的统一,对前端工程交付变得更容易。那双向绑定就是一种手段,可以让html与JS分离开来,而不用直接操作dom层,让JS专心处理业务代码(组装显示业务数据)。总之双向绑定只是一种手段,直接操作DOM也是一种手段,在合适场景使用合适手段。 ####4、按需加载 - 在这里,框架是认为前端资源与后端代码是可以完全分离,即restful+前端 - 首先统一前端开发动态加载的资源是什么,本框架指js文件和view模板资源(css有些人认为是,但它动态加载严重影响体验) - 框架所有动态加载资源都是通过route(路由)进行前端资源url design - 载模块提供一种最单纯加载机制,就是只负责加载(route转发后的地址加载资源), 因此是兼容所有现有的JS库,如果要合并打包也就最低限度设置即可。 ####5、兼容性 在JS方面可以说完全兼容到IE6;在dom管理方除了核心编译部分用了原生外,其它都几乎依赖jQuery写的,所以取决于jQuery版本的兼容; ####6、bingoJS开发过程 最近好多人问我这样框架跟现有的框架有什么不同,别的框架我不与置评,但在这里想说说为什么要开发这个框架: 一开始我也加入了**jQuery**开发队伍中,它提供了全新的dom操作方式、兼容处理,还有ajax等,让我兴奋不已;它终于可以不用的dom tree的遍历了,还有该死的兼容,而且它可以让我把html和js分离出来更方便了,开发的东西清晰多了; 但,**jQuery**还是面对dom操作开发的库,对form数据提交和收集是非常痛苦,而且在JS方面会多很多很多代码,这时**jsRender**和**databind**之类的出现;**jsRender**解决模板重用问题和分离,html字串也不用JS代码一段段的去拼了;而**databind**在让你提交和收集数据都自动化了。这样你会发现JS代码里少了很多的操作dom代码了,乘下的大部份是业务相关代码; 由于前端JS代码开始变得清晰,于是慢慢开始将原来后端用于组装前端显示的逻辑前移到JS来实现,你会发现这些东西交给前端JS做会变得更容易,原因JS天生是为组装需求而产生;但这样JS处理的业务慢慢的变多了,也不只是提交和收集这么简单了;这时**jsView**,**knockout**,**backbone**等出现,前端的模板引擎几乎可以代替后端的模板引擎,而且是后端难以处理的双向绑定也完美支持了;在JS代码组织方面也进一步清晰起来了,只有一部分功能需要直操作dom,可以说这时是可以完全前后端分离开发,后端(MV)前端(MV); **angularjs**的出现可以说对模板引擎的进化和JS代码的M层进一步细化,也引进路由和注入之类的概念到前端;如果有前后完全分离开发的同学都知道,到这时期,前端框架可以服务更多的前端业务代码(组装业务),前端代码组织已经变得很清晰了,已经不像jQuery时代一样,代码乱写一通了,直接操作dom的代码几乎没有了,只有面向业务开发了。 以上简单说了一下前端MV*的发展过程,说得都是大家可能熟悉的框架和库;而一直以来每个阶段**bingoJS**前身都有在对其重新开发改良集成到平时工作上去,比如**jsRender**你可以框架里**$render**找到它的影子;而**bingoJ**S能在模板、代码组织方面吸收各方面长处,最后引进动态加载引用,几乎可以同后台一样,引用即可用的思维开发前端了,使用各个业务开发原子化,也不用考虑合并。 最后顺便说说动态加载引用, 其实他们都争议**AMD**和**CMD**时,我自己选择第三种方案,就是想用什么就加载什么,加载的JS里爱写什么就写什么,我就帮你加载成功和执行有效而已;而它们只会带严重碎片,也不利于MV组织了,当然这里也对它也没有冲突,完全共享,包括现有所有的库和框架; 如果有兴趣研究同学可以联系我,git上面留言