整理了一些设计Grid时候依赖产生的api思考,开始发布
需求是这样的:
1.设计前我定义了选中行的属性selectedRows是一个[],用来存放所有选中行的index信息,方便后面的选中和取消选中等相关操作。
2.现在你设计选中行和取消选中行的时候,你一定会判断当前的rowIndex是否在这个数组selectedRows里面,但是我们知道没有原生的api去支持这个arrray.indexOf.
先看看tangram的做法吧
/* 首先说明一下本人做了一下小修改,去掉了一个变量的定义。因为没有引用的地方。 *indexOf-search the index of the element in a array* *@function* *@param {Array} source---the array* *@param element---the element* *@param {number} fromIndex---the start index for search *@remark(_ps:if fromIndex <0 will set it to source.length+fromIndex)* *@return {number} if not find will return -1 just like js-lib* */ ZYC.array.indexOf = function(source,element,fromIndex){ var _lenth = source.length, //源数组对象的length //iterator = element; fromIndex = fromIndex || 0; //给一个默认值,这个做法我个人一直遵循 if(fromIndex < 0){ //if < 0 支持负值方向查询 fromIndex = Math.max(0,_lenth + fromIndex); } for(;fromIndex<_lenth;fromIndex++){ if(fromIndex in source && source[fromIndex] === element){ return fromIndex; } } return -1; }; //在自己开始设计的时候并没有想到像tangram一样支持index似的的查找 //而且比较好的是支持类似于string.slice()这样的原生api的负值反向查找的功能
通过上述的indexOf,我上面的需求也已经完成了
简单举例:
var selectedRows = [0,1,2]; //在设计getSelected的时候 //判断是否选中 //rowIndex是当前的行序号 //isSelected是当前行是否被选中 //g是grid对象或者api内部的this var isSelected = (ZYC.array.indexOf(g.selectedRows,rowIndex) != -1);