iRSF快速简单易用的实现列表、排序、过滤功能
IRSF 是由javascript编写,iRSF快速简单易用的实现列表、排序、过滤功能(该三种操作以下简称为 RSF )。
iRSF由三个类组成。
iRSFSource 数据源
iRSFFilter 过滤器
iRSFSorter 排序器
iRSF 使用:
iRsf = new iRSF();
iRsf.draw = function(data){
//展现列表,data的结构为{property:[{data1},{data2}]},* property 可以自定义,由iRSFSource 指定。
};
//指定数据源
iRsf.setSource({
src:{items:[{id:1121,name:"dfsa"},{id:1122,name:"dfsa"}]},
property:"items"
}); //添加过滤器
iRsf.addFilter("id",function(row){
return row.id==1121;
}); //设置排序
iRsf.setSort(function(a,b){
return a.id-b.id;
}); //执行,并重画列表 会调用iRsf.draw方法
iRsf.records();
iRsf 源码:
/**
* 展现列表、排序、过滤(该三种操作以下简称为 RSF )
* iRSF快速简单易用的实现列表,排序,过滤等功能
* User: oshine
* Date: 13-7-30
* Time: 上午11:31
*/ function iRSFSource(setting)
{
this.property = setting.property || "items";
this.src = setting.src || {}; this.clonePropertyList = function()
{
var tmp_data = [];
for(var i in this.src[this.property])
{
tmp_data[i] = this.src[this.property][i];
}
return tmp_data; }; this.clone = function()
{
var result = {};
var tmp_data = this.clonePropertyList();
return result[this.property] = tmp_data;
}
} function iRSFFilter()
{
this.filters = {}; this.filtering = function(src_data)
{
var ret = [],i= src_data.length-1;
for(;i>=0;i--)
{
var flag = true;
for(var j in this.filters)
{
var fn_filter = this.filters[j];
if(typeof fn_filter == "function")
{
flag = flag && fn_filter(src_data[i]);
} if(!flag)
{
break;
}
} if(flag)
{
ret.push(src_data[i]);
}
} return ret;
}; this.clearFilters = function()
{
for(var j in this.filters)
{
this.filters[j] = null;
delete this.filters[j];
}
}
} function iRSFSorter()
{
this.sort = null; this.sorting = function(src_data)
{
if(this.sort === undefined || this.sort == null || typeof this.sort !== "function")
{
return src_data;
} src_data.sort(this.sort);
return src_data;
} } function iRSF()
{
this.iSource = new iRSFSource({src:{},property:"items"});
this.sorter = new iRSFSorter();
this.filter = new iRSFFilter();
this.draw = null; this.setSource= function(setting)
{
this.iSource.src = setting.src || {};
this.iSource.property = setting.property || "items";
}; this.records = function()
{
var $data = this.iSource.clonePropertyList();
$data = this.filter.filtering($data);
$data = this.sorter.sorting($data); var result = {};
result[this.iSource.property] = $data; if(this.draw !== undefined && this.draw !== null && typeof this.draw === "function")
{
this.draw(result);
}
return result;
}; this.addFilter = function(name,filter)
{
this.filter.filters[name] = filter;
}; this.removeFilter = function(name)
{
if(this.filter.filters[name] == undefined)
{
return true;
} this.filter.filters[name] = null;
delete this.filter.filters[name];
return true;
}; this.setSort = function(sort)
{
this.sorter.sort = sort;
}; this.clearSort = function()
{
this.sorter.sort = null;
} }
iRSF快速简单易用的实现列表、排序、过滤功能的更多相关文章
- 快速上手seajs——简单易用Seajs
快速上手seajs——简单易用Seajs 原文 http://www.cnblogs.com/xjchenhao/p/4021775.html 主题 SeaJS 简易手册 http://yslo ...
- 一个基于 .NET Core 2.0 开发的简单易用的快速开发框架 - LinFx
LinFx 一个基于 .NET Core 2.0 开发的简单易用的快速开发框架,遵循领域驱动设计(DDD)规范约束,提供实现事件驱动.事件回溯.响应式等特性的基础设施.让开发者享受到正真意义的面向对象 ...
- DataAccess通用数据库访问类,简单易用,功能强悍
以下是我编写的DataAccess通用数据库访问类,简单易用,支持:内联式创建多个参数.支持多事务提交.支持参数复用.支持更换数据库类型,希望能帮到大家,若需支持查出来后转换成实体,可以自行扩展dat ...
- jq分页插件,支持动态,静态分页的插件,简单易用。
工作中经常要用到分页功能.为了方便封装了一个比较通用的分页插件开源出来了,简单易用. 官网:https://cwlch.github.io/Ch_Paging 下载地址:https://github. ...
- FineBI:一个简单易用的自助BI工具
过去,有关企业数据分析的重担都压在IT部门,传统BI分析更多面向的是具有IT背景的人员.但随着业务分析需求的增加,很多公司都希望为业务用户提供自助分析服务,将分析工作落实到业务人员手中.但同时,分析工 ...
- 设计与开发一款简单易用的Web报表工具(支持常用关系数据及hadoop、hbase等)
EasyReport是一个简单易用的Web报表工具(支持Hadoop,HBase及各种关系型数据库),它的主要功能是把SQL语句查询出的行列结构转换成HTML表格(Table),并支持表格的跨行(Ro ...
- 分享一个简单易用的RPC开源项目—Tatala
http://zijan.iteye.com/blog/2041894 这个项目最早(2008年)是用于一个网络游戏的Cache Server,以及一个电子商务的Web Session服务.后来不断增 ...
- 简单易用的Rest
今天碰巧,用到了淘宝的在线IP地址查询的Rest API,它提供接口给用户查询IP地址的归宿地.数据库比较庞大,准确性也比较高.地址为:http://ip.taobao.com/instruction ...
- c#简单易用的短信发送服务 悠逸企业短信服务
悠逸企业短信发送服务,是一种比较简单易操作的短信发送服务,使用POST的方式,请求相应地址就可以实现短信发送功能 1 /// <summary> /// 短信发送服务 /// </ ...
随机推荐
- HDFS datanode心跳与运维中的实际案例
分布式系统的节点之间常采用心跳来维护节点的健康状态,如yarn的rm与nm之间,hdfs的nn与dn之间.DataNode会定期(dfs.heartbeat.interval配置项配置,默认是3秒)向 ...
- Spark高级数据分析· 3推荐引擎
推荐算法流程 推荐算法 预备 wget http://www.iro.umontreal.ca/~lisa/datasets/profiledata_06-May-2005.tar.gz cd /Us ...
- 【分库分表】sharding-jdbc—分片策略
一.分片策略 Sharding-JDBC认为对于分片策略存有两种维度: 数据源分片策略(DatabaseShardingStrategy):数据被分配的目标数据源 表分片策略(TableShardin ...
- 【Head First Servlets and JSP】笔记 28: 过滤器与包装器
1.过滤器的执行顺序: <url-pattern> 为第一梯队, <servlet-name> 为第二梯队,梯队内的执行顺序和 DD 里的声明顺序相同. When the co ...
- linux把软件安装到指定目录
1.安装包带configure文件的: ./configure --prefix=安装目录 2.安装包不带configure文件,只带MakeFile 2.1 make install PREFIX= ...
- 20145201李子璇《网络对抗》逆向及Bof基础实践
20145201李子璇<网络对抗>逆向及Bof基础实践 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回 ...
- 学习Windows(BAT)、Linux(Shell)编程,并分别写一个脚本文件解决自己的一个问题
delete: @echo off echo Press any key to delete this file.pause del %0 ip: @echo off color a Title 端口 ...
- Swift学习笔记 - OC中关于NSClassFromString获取不到Swift类的解决方案
在OC和Swift混编的过程中发现在OC中通过NSClassFromString获取不到Swift中的类,调研了一下发现问题所在,下面是我的解决方案: 问题的发现过程 UIViewController ...
- js 自定义事件观察者模式(发布/订阅)
/* * 示例: * Event.create("namespace1").listen('click', function(a){ * console.log(a); * }); ...
- jQuery使用ajaxSubmit()提交表单(在不希望页面跳转的情况下)
原文:http://www.jb51.net/article/48728.htm ajaxSubmit(obj)方法是jQuery的一个插件jquery.form.js里面的方法,所以使用此方法需要先 ...