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. 论文笔记:IRGAN——A Minimax Game for Unifying Generative and Discriminative Information

    2017 SIGIR 简单介绍 IRGAN将GAN用在信息检索(Information Retrieval)领域,通过GAN的思想将生成检索模型和判别检索模型统一起来,对于生成器采用了基于策略梯度的强 ...

  2. zookeeper No route to host

    2017-10-12 07:25:59,270 [myid:1] - WARN [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181:QuorumCnxManager@36 ...

  3. 为MarS Board安装无线网卡Linux驱动

    玩了几天MarS Board,发现要了解Linux是如何工作的,从嵌入式开发板玩起最有效率.因为会遇到无数的问题和未知领域,然后在解决问题的过程中有深入了解Linux的机会.   为这块开发板专门买了 ...

  4. 20145302张薇《Java程序设计》第五周学习总结

    20145302 <Java程序设计>第五周学习总结 教材学习内容总结 第八章 try catch JVM会先尝试执行try区块中的内容,若发生错误且与catch后面的类型相符,则执行ca ...

  5. linux第四周

    一.知识点总结 (一)用户态.内核态和中断 1.内核态:在高的执行级别下,代码可以执行特权指令,访问任意的物理地址,这时的CPU就对应内核态 2.用户态:在低级别的指令状态下,代码 只能在级别允许的特 ...

  6. IntelliJ IDEA 开发git多模块项目

    1.clone主项目 填写主仓库地址 2.在项目根目录,初始化子模块,并clone源码 git submodule init git submodule update 3.定位到各个子模块根目录,并切 ...

  7. Hive的三种Join方式

    Hive的三种Join方式 hive Hive中就是把Map,Reduce的Join拿过来,通过SQL来表示. 参考链接:https://cwiki.apache.org/confluence/dis ...

  8. swoole http_server 多进程并使用多进程处理消息

    <?php $http = new swoole_http_server("0.0.0.0", 9511); $http->set([ 'worker_num' =&g ...

  9. Ubuntu16.04 anaconda3 opencv已经安装,但是无法import的问题

    解决anaconda中已经安装了opencv3,但无法import的问题 你可能遇见的问题: ImportError: No module named cv2 ImportError: libz-a1 ...

  10. Python学习札记(十八) 高级特性4 生成器

    参考:生成器 Note 1.通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的,且容易造成空间浪费.所以,如果列表元素可以按照某种算法推算出来,那我们可以在循环的过程中 ...