/structurejs

在web前端工作中为一些实际需求定义的数据结构的javascript类

Primary LanguageJavaScriptMIT LicenseMIT

#structurejs

在web前端工作中为一些实际需求定义的数据结构的javascript类

##PagedData

###介绍

一个分页的数据模型,在之前的一些项目工作中常会做到ajax调取服务端提供的分页的数据接口。
在页面调用中因为特定的需求,同一页面需要反复请求同一页的数据,因为数据的实时要求不高希望反复请求数据,在浏览器缓存支持下,每次ajax取数据,没有太大问题,同一页数据会直接从浏览器缓存中取得。
但是在需要jsonp跨域,或者返回script的情况下,无法使用浏览器缓存。另外在一些特定的项目中,需要取的,第n页的第n个item,如果已经取过该分页数据,则不希望重复请求。
每次遇到这样的状况,都要写很多脚本,去实现,而且感觉代码非常的乱,于是就写了这样一个javascript类来存储分页数据。

###限制

写入的分页数据必须为数组(Array),而数组中的每一项必须满足typeof item === 'object',且没有pageIndex,indexInPage这2个属性,因为writePage方法会自动为每一个项加上这2个属性,以便调用getItemBefore和getItemAfter方法时,可以确定位置

###用法

// 初始化
var pd = new PagedDatas(); 

// 返回信息的枚举 PagedDatas.returnMassages
// PagedDatas.returnMassages['NO_PAGE_MESSAGE']      : 没有该分页数据(页码 < 1 或者 页码 > 总页数)
// PagedDatas.returnMassages['NO_ITEM_MESSAGE']      : 没有在该分页中找到指定位置的项(在页中的位置 >= 该页的项的总数)
// PagedDatas.returnMassages['NEED_FATCH_MESSAGE']   : 需要写入该页的数据(页码在范围内,但是没有该页数据,需要写入)
// PagedDatas.returnMassages['NEED_NEXT_MESSAGE']    : 需要写入下一页的数据(下一页页码在范围内,但是没有该页数据,需要写入)
// PagedDatas.returnMassages['NEED_PREV_MESSAGE']    : 需要写入上一页的数据(上一页页码在范围内,但是没有该页数据,需要写入)

/**
 * 分页信息写入,每次调用改方法会重置pageCount 总页数
 * @param  {int} 		pageIndex 需要写入的页码
 * @param  {Array} 	pageData  分页信息,确保数组中每一项都不能是基本类型(满足typeof item === 'object'),且没有pageIndex,indexInPage这2个属性
 * @param  {int} 		pageCount 总页数
 * @return {Array}           	写入后的分页数据数组
 */
pd.writePage(pageIndex, pageData, pageCount);


/**
 * 分页信息读取
 * @param  {int} 							pageIndex 需要读取的页码
 * @return {Array or String}           	如果返回Array,即该分页的数据,
																				如果返回String,则对比PagedDatas.returnMassages 枚举中对应项,NO_PAGE_MESSAGE or NEED_FATCH_MESSAGE
 */
pd.readPage(pageIndex);

/**
 * 分页中读取指定页码的指定位置对应的单项
 * @param  {int} 							pageIndex   页码
 * @param  {int} 							indexInPage 在该页中的位置
 * @return {Object or String}             如果返回Object,该位置的单项,
																					如果返回String,则对比PagedDatas.returnMassages 枚举中对应项,NO_PAGE_MESSAGE or NEED_FATCH_MESSAGE or NO_ITEM_MESSAGE
 */
pd.getItem(pageIndex, indexInPage);

/**
 * 分页中读取在指定页码的指定位置前一个对应的单项
 * @param  {int} 							pageIndex   页码
 * @param  {int} 							indexInPage 在该页中的位置
 * @return {Object or String}             如果返回Object,该位置的单项,
																					如果返回String,则对比PagedDatas.returnMassages 枚举中对应项,NO_PAGE_MESSAGE or NEED_FATCH_MESSAGE or NO_ITEM_MESSAGE or NEED_PREV_MESSAGE
 */
pd.getItemBefore(pageIndex, indexInPage);

/**
 * 分页中读取在指定页码的指定位置前一个对应的单项
 * @param  {int} 							pageIndex   页码
 * @param  {int} 							indexInPage 在该页中的位置
 * @return {Object or String}             如果返回Object,该位置的单项,
																					如果返回String,则对比PagedDatas.returnMassages 枚举中对应项,NO_PAGE_MESSAGE or NEED_FATCH_MESSAGE or NO_ITEM_MESSAGE or NEED_NEXT_MESSAGE
 */
pd.getItemAfter(pageIndex, indexInPage);

##LinkedList

###介绍

双项链表 在https://github.com/tucaz/LinkedList 基础上修改了一些bug及代码规范,按自己的需求添加了2个方法

用法请参照https://github.com/tucaz/LinkedList

/**
 * 获取这个node在链表中的位置,从head为0开始
 * @return {int}             位置
 */
Node.getPos();

/**
 * 分页信息读取
 * @param  {int} 		pos 	需要读取的页码
 * @return {Node}           		对应位置node
 */
LinkedList.get(pos);