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;
    }

}

  

  

posted @ 2014-08-01 14:24  oShine.Q  阅读(196)  评论(0编辑  收藏  举报