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

时间: 2024-10-09 07:19:25

iRSF快速简单易用的实现列表、排序、过滤功能的相关文章

iOS简单易用的标签列表界面

iOS简单易用的标签列表界面 Demo效果: Demo演示: 1.使用cocoapods引入YZTagListView,或者直接拖入YZTagListView文件夹到项目中 2.导入YZTagListView.h头文件 1 #import "YZTagList.h" 3.创建YZTagListView控件 1 2 3   YZTagList *tagList = [[YZTagList alloc] init];   tagList.backgroundColor = [UIColor

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

快速上手seajs——简单易用Seajs 原文  http://www.cnblogs.com/xjchenhao/p/4021775.html 主题 SeaJS 简易手册 http://yslove.net/seajs/ 背景 一个网站必然会涉及很多功能,tab选项卡.slide轮播图.pop弹出层.美化alert.paging分页等等等等,如果是企业网站那整合成一个js文件就够了,即 插件库 . 但是对于一个大的网站平台来说需要的功能可能会有很多,而且随着平台的发展,功能会越来越多.到最后会

OkHttpUtils-2.0.0 升级后改名 OkGo,全新完美支持 RxJava,比 Retrofit 更简单易用。

okhttp-OkGo 项目地址:jeasonlzy/okhttp-OkGo 简介:OkHttpUtils-2.0.0 升级后改名 OkGo,全新完美支持 RxJava,比 Retrofit 更简单易用.该库是封装了 okhttp 的网络框架,支持大文件上传下载,上传进度回调,下载进度回调,表单上传(多文件和多参数一起上传),链式调用,可以自定义返回对象,支持 Https 和自签名证书,支持 cookie 的持久化和自动管理,支持四种缓存模式缓存网络数据,支持 301 和 302 重定向,扩展了

Thinkbox.Deadline.v8.0.4.1.Linux 1DVD简单易用的管理和渲染+Xpedition Enterprise VX.2.1

Allen Bradley RSLogix5 v8.0 Win32-ISO 1DVD 使用RSLogix 5000 软件可以完全实现对模块的设置和监视 通过I/O 实现ControlLogix 背板连接 所有模块相关数据都包含在一个处理器数据对象中,这便于配置,监视和连接模块参数.RSLogix 5000功能更加强大,更加方便实用.RsLogix 5000编程软件除了为顺序控制提供梯形图编程外,还可以为运动控制提供完整的编程及调试支持.RSLogix 5000可同时完成顺序控制与运动控制. Sy

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

http://zijan.iteye.com/blog/2041894 这个项目最早(2008年)是用于一个网络游戏的Cache Server,以及一个电子商务的Web Session服务.后来不断增加新的功能,除了Java还支持C#,到现在已经可以用它来开发网络游戏的服务器.等过些日子我还会开源网络游戏的服务器源码. 关于性能,当时后台相应请求的效率是每秒10W次,现在我在自己的笔记本上测,只有一个客户端与服务器都在一个物理机上(CPU: i7-3610QM; RAM: 8G; OS: Win

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

 悠逸企业短信发送服务,是一种比较简单易操作的短信发送服务,使用POST的方式,请求相应地址就可以实现短信发送功能 1 /// <summary> 2 /// 短信发送服务 3 /// </summary> 4 public class ShortMsgHelper 5 { 6 /// <summary> 7 /// 短信服务 账号 8 /// </summary> 9 private static string uid = ConfigurationMan

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

EasyReport是一个简单易用的Web报表工具(支持Hadoop,HBase及各种关系型数据库),它的主要功能是把SQL语句查询出的行列结构转换成HTML表格(Table),并支持表格的跨行(RowSpan)与跨列(ColSpan).同时它还支持报表Excel导出.图表显示及固定表头与左边列的功能.总体架构如下图所示: 目录 开发环境(Development Environment) 安装与部署(Installation & Deployment) 从源代码安装(From Source Co

Chimee - 简单易用的H5视频播放器解决方案

Chimee是由奇舞团开源的一套H5视频播放器解决方案,由奇舞团视频云前端团队结合在业务和视频编解码方向的沉淀积累倾心打造.Chimee支持MP4.M3U8.FLV等多种媒体格式,同时它也帮我们解决了大部分的兼容性.差异化问题,包括全屏.自动播放.内联播放.直播解码等常见媒体播放需求. 通过便捷的可热插拔的插件开发,能满足业务方快速迭代.灰度发布等要求:让开发者能够更轻松快捷地完成不同业务场景下UI.广告等各种功能需求的开发. 在线演示      免费下载 您可能感兴趣的相关文章 网站开发中很有

最全的 50+ 易用 Docker 工具列表指南

如今,整个容器生态系统的发展和扩展速度比以往任何时候都快,面对众多 Docker 工具和服务,光是了解可用选项就需要花费大量时间.本文总结了易用的 50 多种 Docker 工具,适合初学者.研发人员.DevOps 工程师.SRE 和平台架构师. 编排和调度工具 1.Kubernetes Kubernetes 是市场上现有最受欢迎的容器编排引擎.最初由谷歌研发,目前已被数千个团队在生产中部署使用.谷歌声称每周使用 Kubernetes 运行数十亿个容器.该工具的工作原理是将构成应用程序的容器分组