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快速简单易用的实现列表、排序、过滤功能的更多相关文章

  1. 快速上手seajs——简单易用Seajs

    快速上手seajs——简单易用Seajs   原文  http://www.cnblogs.com/xjchenhao/p/4021775.html 主题 SeaJS 简易手册 http://yslo ...

  2. 一个基于 .NET Core 2.0 开发的简单易用的快速开发框架 - LinFx

    LinFx 一个基于 .NET Core 2.0 开发的简单易用的快速开发框架,遵循领域驱动设计(DDD)规范约束,提供实现事件驱动.事件回溯.响应式等特性的基础设施.让开发者享受到正真意义的面向对象 ...

  3. DataAccess通用数据库访问类,简单易用,功能强悍

    以下是我编写的DataAccess通用数据库访问类,简单易用,支持:内联式创建多个参数.支持多事务提交.支持参数复用.支持更换数据库类型,希望能帮到大家,若需支持查出来后转换成实体,可以自行扩展dat ...

  4. jq分页插件,支持动态,静态分页的插件,简单易用。

    工作中经常要用到分页功能.为了方便封装了一个比较通用的分页插件开源出来了,简单易用. 官网:https://cwlch.github.io/Ch_Paging 下载地址:https://github. ...

  5. FineBI:一个简单易用的自助BI工具

    过去,有关企业数据分析的重担都压在IT部门,传统BI分析更多面向的是具有IT背景的人员.但随着业务分析需求的增加,很多公司都希望为业务用户提供自助分析服务,将分析工作落实到业务人员手中.但同时,分析工 ...

  6. 设计与开发一款简单易用的Web报表工具(支持常用关系数据及hadoop、hbase等)

    EasyReport是一个简单易用的Web报表工具(支持Hadoop,HBase及各种关系型数据库),它的主要功能是把SQL语句查询出的行列结构转换成HTML表格(Table),并支持表格的跨行(Ro ...

  7. 分享一个简单易用的RPC开源项目—Tatala

    http://zijan.iteye.com/blog/2041894 这个项目最早(2008年)是用于一个网络游戏的Cache Server,以及一个电子商务的Web Session服务.后来不断增 ...

  8. 简单易用的Rest

    今天碰巧,用到了淘宝的在线IP地址查询的Rest API,它提供接口给用户查询IP地址的归宿地.数据库比较庞大,准确性也比较高.地址为:http://ip.taobao.com/instruction ...

  9. c#简单易用的短信发送服务 悠逸企业短信服务

     悠逸企业短信发送服务,是一种比较简单易操作的短信发送服务,使用POST的方式,请求相应地址就可以实现短信发送功能 1 /// <summary> /// 短信发送服务 /// </ ...

随机推荐

  1. Java反射在整个程序运行中的位置

    ①java的核心机制 java有两种核心机制:java虚拟机(JavaVirtual Machine)与垃圾收集机制(Garbage collection): ①Java虚拟机:是运行所有Java程序 ...

  2. 解决NodeJS+Express模块的跨域访问控制问题:Access-Control-Allow-Origin

    在一个项目上想用NodeJS,在前端的js(http://localhost/xxx)中ajax访问后端RestAPI(http://localhost:3000/….)时(Chrome)报错: XM ...

  3. JqGrid 隐藏水平滚动条完美解决方案

    我有强迫症,网上找的几个看着就不舒服 不用更改样式表,隐藏最右侧的边框. .ui-jqgrid .ui-jqgrid-bdiv{ overflow-x: hidden; } 不用通过js控制加1px ...

  4. C++在VS下创建、调用dll

    转自:http://www.cnblogs.com/houkai/archive/2013/06/05/3119513.html 目录 1.dll的优点 代码复用是提高软件开发效率的重要途径.一般而言 ...

  5. jqgrid动态填充select

    前两天使用jquery动态填充jqgrid的select,默认随便用一个dict填充(初始化页面是会替换掉),用着可以,后来发现当行数增多,回到以前行继续编辑发现select又变成了那个用来避免报错随 ...

  6. Linux内存管理的基本框架⭐⭐

    Linux内核的映射机制设计成三层,在页面目录和页面表中间增设了一层“中间目录”.在代码中,页面目录称为PGD,中间目录称为PMD,而页面表称为PT.PT中的表项称为PTE,PTE是“Page Tab ...

  7. Jquery8 基础事件

    学习要点: 1.绑定事件 2.简写事件 3.复合事件 JavaScript 有一个非常重要的功能,就是事件驱动.当页面完全加载后,用户通过鼠标或键盘触发页面中绑定事件的元素即可触发.jQuery 为开 ...

  8. Job流程:提交MR-Job过程

    1.一个标准 MR-Job 的执行入口: //参数 true 表示检查并打印 Job 和 Task 的运行状况 System.exit(job.waitForCompletion(true) ? 0 ...

  9. Ubuntu 下安装Beyond Compare【转】

    本文转载自:https://blog.csdn.net/bingyu9875/article/details/52856675 官网下载安装包:http://www.scootersoftware.c ...

  10. keras安装配置指南【linux环境】【转】

    本文转载自:https://keras-cn.readthedocs.io/en/latest/for_beginners/keras_linux/#kerasmnist 本教程不得用于任何形式的商业 ...