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. sgu 101 Domino 解题报告及测试数据

    101. Domino time limit per test: 0.25 sec. memory limit per test: 4096 KB 题解: 求多米诺骨牌按照一定方式放置能否使相邻的位置 ...

  2. ElasticSearch recovery过程源码分析

    [ES版本] 5.5.0 [分析过程] 找到Recovery有6种状态 public class RecoveryState implements ToXContent, Streamable { p ...

  3. 【android内存泄露】 WebView篇

    在咱的博客园app里,新闻的内容使用WebView展示的.在测试中,咱重复进入.退出某个新闻10多次,观察到 Objects一直在不断增长,反复触发GC,但是一直回收不了,占用的内存越来越高,于是警觉 ...

  4. SparkSQL程序设计

    1.创建Spark Session val spark = SparkSession.builder . master("local") .appName("spark ...

  5. mybatis-3 Dynamic SQL

    Dynamic SQL One of the most powerful features of MyBatis has always been its Dynamic SQL capabilitie ...

  6. java中hashSet原理

    转自: http://blog.csdn.net/guoweimelon/article/details/50804799 HashSet是JavaMap类型的集合类中最常使用的,本文基于Java1. ...

  7. MAC VNC SSH roo用户开通

    第一步:ssh: user@xxx.xxx.xxx 第二步:开启VNC 开启VNC共享桌面: sudo  /System/Library/CoreServices/RemoteManagement/A ...

  8. 20145329 《Java程序设计》第五周学习总结

    20145329 <Java程序设计>第五周学习总结 教材学习内容总结 第八章 Java异常处理是要处理Exception类及其子类(Checked Exception),RuntimeE ...

  9. 【纯代码】Swift-自定义PickerView单选(可修改分割线颜色、修改字体大小、修改字体颜色。)(可根据需要自己扩展)

    typealias PopPickerViewCallBackClosure = (_ resultStr:NSString?) -> () class PopPickerView : UIVi ...

  10. [BZOJ3733]Iloczyn

    Description 给定正整数n和k,问能否将n分解为k个不同正整数的乘积 Input 第一行一个数T(T<=4000)表示测试组数 接下来T行每行两个数n(n<=10^9),k(k& ...