为何要事宜模子
先从 BackboneJS 最先提及。BackboneJS 设想的比较好的一部份代码就是事宜相干的内容,传送门:
http://backbonejs.org/docs/backbone.html#section-13
jQuery 内里用到最多的就是bind相干的操纵,为一个按钮绑定点击事宜,给他解绑一个事宜或许解绑一切事宜,这一类的事宜都是面向Dom对象。富应用中还须要一类孤立于DOM的事宜,他们也须要相似增加事宜、删除事宜、解绑事宜和触发事宜。比方监测URL的变化,在其他处所能够绑定了许多事宜,然则实在变化的时刻只须要触发一下边能实行一切要领。
事宜模子的代码
终究我本身框架内里写的事宜很大部份参考了 BackboneJS ,详细代码传送门:
https://github.com/vincenting/HaiyiYun/blob/master/src/vintjs.js#L175
重要的功用包含绑定 on ,解绑 off ,触发 trigger 。on 终究期待的参数是(事宜称号,回调函数,回调函数上下文),off终究期待的参数是(事宜称号[,回调函数][,回调函数上下文]),trigger 终究期待的参数是(时候称号[,args…])。然则为了天真,还须要一些天真的参数,比方时候称号允许是多个事宜称号以空格离开,以及以对象的情势同时传入称号和回调函数。因而 BackboneJS 中应用了eventsApi 举行一致的处置惩罚。
题外话-内存洁癖
Javascript 内里写[]实际上是 new Array,因而很轻易无意中发生许多应用很暂时的列表对象,比方一些暂时列表,作为参数应用 apply 传递给函数。关于一个列表来讲,最快的清空要领就是修正他的length,以下
var arr = [1,2,3,4];
arr.length = 0;
console.log(arr);
以后 arrObj 内容便会被开释。如许的对象能够屡次应用,然则非暂时的变量肯定不能应用。缘由以下:
var arr = [1,2,3,4];
var new_list = arr;
arr.length = 0;
console.log(new_list[0]);
雷同的 Object 也能够应用相似的要领来重复应用。这些都是为了只管削减对象的新建,页面一向开着什么情况都有能够发生,其他对象也是云云,字符串、函数、正则对象。
能够用到事宜的处所
- 之前有提到的url变化的时刻会触发事宜,这些事宜能够包含去寻觅对应的路由并剖析,对当前状况存在的事宜一致解绑,删除Dom等等。
- 控制器间的通讯也会用到事宜模子。一个控制器中触发了一个事宜,然后事宜被触发去和其他控制器通讯。
- 数据和视图的绑定也须要应用事宜。一个数据更新了挪用什么要领去更新视图,一个列表删除或许增加数据了又去挪用什么要领去更新视图。
- 另有就是体系内部的解耦等等。
完成事宜以后就须要去监听url的变化而且剖析,以及一些相似于背景的url处置惩罚要领。(更新待续)