/**
 * listview 是一个重要的组件,用于有滚动上拉下拉刷新的数据列表容器组件,根据业务的需要只需配置简单的参数,即可到达业务需求<br>:
 *  <strong>
 *          页面需要导入的文件
 *          <ul>
 *              <li>cmp-imgCache.js(当listview中用到了图片懒加载,需要导入此文件)</li>
 *              <li>cmp-listView.js</li>
 *              <li>cmp-listView.css</li>
 *          </ul>
 *      </strong>
 * @module listview
 * @subtitle 列表容器
 */


/**
 * 可上拉请求数据,下拉刷新当前页面数据的垂直滚动容器,主要应用场景:<br>
 *     在列表数据展现时,可根据需要分页展示数据列表,并能实现根据上拉和下拉手势对当前页面展示的数据进行刷新、增加处理
 * @class listView
 * @namespace cmp
 * @constructor
 * @param {String} container 列表容器标识,querySelector能定位的css选择器均可,比如:id、.class等,如:"#id"、".class"(必须符合以上两种形式的查询)
 * @param {Object} [opts] 配置上拉下拉参数,如果没有定义,则该容器是一个普通列表,不会有分页、上拉下拉特征
 *      @param {Object} [opts.config] 数据刷新、分页数量等参数的配置(组件提供了默认值)
 *              @param {Number} [opts.config.captionType] 下拉上拉控件显示类型<br>
 *                  <ul>
 *                      <li>0:不显示条数,只显示文字</li>
 *                      <li>1:显示条数和文字(默认)</li>
 *                  </ul>
 *             @param {Number} [opts.config.pageSize] 分页大小(默认:20)
 *             @param {Number} [opts.config.height] 下拉刷新的高度(默认:60)
 *             @param {Object|Array} opts.config.params 上拉下拉刷新请求函数需要的参数,格式:{ticket: "luodx"},即开发者传的是什么参数,组件就返回给开发者怎么参数,其中格式:<br>
 *                     <ul>
 *                         <li>对象格式:在调用开发者的dataFunc时返回两个参数给开发者,1、第一个参数:包含开发者的传参和pageNo+pageSize;2、第二个参数:包含了组件的成功回调+错误回调+组件返回的参数</li>
 *                         <li>数组格式(最多有两个item):在调用开发者的dataFunc时返回三个参数给开发者,1、第一个参数:开发者传的数组的第一个参数2、第二个参数:包含开发者的传参和pageNo+pageSize;3、第三个参数:包含了组件的成功回调+错误回调+组件返回的参数</li>
 *                     </ul>
 *             @param {Function} opts.config.dataFunc 上拉下拉刷新请求数据的函数
 *             @param {Function} opts.config.renderFunc 下拉上拉刷新数据请求完毕渲染列表的函数
 *             @param {Function} opts.config.renderNoDataCallback 无数据时回调开发者定义的函数
 *             @param {Boolean} [opts.config.isClear] 是否在进行使用同一个listview时,在进行面包屑或页签切换时重新向服务器请求数据(而不缓存数据)<br>
 *                 <ul>
 *                     <li>true:重新请求;</li>
 *                     <li>false:不重新请求(默认)</li>
 *                 </ul>
 *             @param {Boolean} [opts.config.clearCache] 当isClear为false的时候,页面跳转后回到当前页面,是否需要清空之前的缓存,
 *                  <ul>
 *                      <li>true:需要清空</li>
 *                      <li>false:不清空(默认)</li>
 *                  </ul>
 *             @param{Number} [opts.config.crumbsID] 面包屑/页签id,用于区分同一个listview对象时,有面包屑/页签时,对数据进行缓存,避免重复向服务器请求已经请求过的数据,以及页面跳转后缓存前一个页面最后一次所在的面包屑/页签数据
 *             @param {Number} [opts.config.purpose] 列表用作的方式,应用场景当首次请求无数据时,以一个开发者自定义的html来展示.<br/>
 *                 <ul>
 *                     <li>1:普通内容展示;</li>
 *                     <li>2:搜索内容展示</li>
 *                     <li>以后进行扩展</li>
 *                     <li>-1:开发者自己渲染无数据的页面,还是要走开发者定义的渲染方法,只是返回的数据为空</li>
 *                 </ul>
 *             @param {Number} [opts.config.onePageMaxNum] 一屏最大数据条数,用于上一页下一页的切换显示,默认:80条
 *             @param {Function} [opts.config.customScrollMoveEvent] 自定义滚动到顶部的事件,如果开发着定义该值,将滚动的y值返回给开发者
 *             @param {Boolean} [opts.config.clearUI] 是否销毁之前创建的listview对象,默认false
 *     @param {Object} [opts.down] 下拉控件的文字、数据数量配置
 *             @param {String} [opts.down.contentdown] 在下拉可刷新状态时,下拉刷新控件上显示的标题内容(默认:"下拉可以刷新")
 *             @param {String} [opts.down.contentover] 在释放可刷新状态时,下拉刷新控件上显示的标题内容(默认:"释放立即刷新")
 *             @param {String} [opts.down.contentrefresh] 正在刷新状态时,下拉刷新控件上显示的标题内容(默认:"正在刷新...")
 *             @param {String} [opts.down.contentprepage] 请求数据条数超过一屏了,需要显示【上一页】的文字
 *     @param {Object} [opts.up] 上拉控件的文字、数据数量配置
 *             @param {String} [opts.up.contentdown] 在上拉可刷新状态时,上拉刷新控件上显示的标题内容(默认:"上拉显示更多")
 *             @param {String} [opts.up.contentrefresh] 正在加载状态时,上拉加载控件上显示的标题内容(默认:"正在加载...")
 *             @param {String} [opts.up.contentnomore] 请求完毕若没有更多数据时显示的提醒内容(默认:"没有更多数据了")
 *             @param {String} [opts.up.contentnextpage] 请求数据条数满一屏了,需要显示【下一页】的文字
 *     @param {Boolean} [opts.imgCache] 是否进行列表中图片的缓存和懒加载<br/>
 *                 <ul>
 *                     <li>true:进行缓存;</li>
 *                     <li>false:不缓存;</li>
 *                     <li>默认:未定义</li>
 *                 </ul>
 *     @param {Object} [opts.offset] 当开启列表图片缓存和懒加载时,如果是有弹出层的情况,需要设置该值,<br>
 *         <ul>
 *             <li>x:页面X坐标开始检测图片的懒加载位置(默认:0,即页面最左边)</li>
 *             <li>x:页面Y坐标开始检测图片的懒加载位置(默认:0,即页面最上面边,比如:选人组件是从页面底部弹出的,那么Y坐标的检测位置应该从window.innerHeight开始检测)</li>
 *         </ul>
 * @demo cmp-listview.html
 * @cutline 请点击[http://open.seeyon.com/seeyon/cmp2.0/demo/demo/pagings/widgetExtend/cmp-listview-listview-paging.html](http://open.seeyon.com/seeyon/cmp2.0/demo/demo/pagings/widgetExtend/cmp-listview-listview-paging.html)查看demo
 *
 * @returns {Object} 返回一个scroll对象:<br>
 *     对象提供调用方法
 *     <ul>
 *         <li>refresh:刷新列表(当容器html内容有增减改变时,需要开发者调用此方法,容器重新计算高度)<br>cmp.listView("container").refresh()</li>
 *         <li>scrollTo:滚动到容器指定位置<br>cmp.listView("container").scrollTo(x,y)</li>
 *         <li>updateAdditionalParts:如果有额外部件的话,可以重新更新额外部件,如果不传值的话,则是删除额外部件,并进行滚动区刷新<br>
 *             cmp.listView("#container").updateAdditionalParts(true);  true:即将html中的额外部件显示出来,false为隐藏起<br>
 *                 额外部件存放位置,应该是cmp-scroll的后面如:<br>
 *                     &lt;div class=&quot;cmp-scroll-wrapper&quot;&gt; <br>
 *                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;div class=&quot;cmp-scroll&quot;&gt;&lt;/div&gt; <br>
 *                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;div class=&quot;cmp-scroll-parts&quot;&gt;&lt;/div&gt;&lt;!--额外部件html位置--&gt; <br>
 *                     &lt;/div><br>
 *         </li>
 *         <li>refreshHeight:根据新传的高度值重置滚动容器高度<br>
 *             cmp.listView("#container").refreshHeight(300);此时滚动容器高度被重置成300像素高了
 *             </li>
 *          <li>
 *              refreshInitData:主动刷新当前列表数据,将pageNo设置成1,效果和下拉刷新效果一样<br>
 *                  cmp.listView("#container").refreshInitData()-------显示刷新成功的提示<br>
 *                  cmp.listView("#container").refreshInitData(false)-------不显示刷新成功的提示
 *          </li>
 *          <li>
 *              destroyListview:销毁listview组件(包括删除掉上落下拉ui部分)<br>
 *                  cmp.listView("#container").destroyListview();
 *          </li>
 *          <li>
 *              getSize:获取listview对象的尺寸<br>
 *                  var size =  cmp.listView("#container").getSize();<br>
 *                  var x = size.x;---------滚动到的x轴位置<br>
 *                  var y = size.y;---------滚动到的Y轴位置<br>
 *                  var wrapperW = size.wrapperW-------------容器的宽度<br>
 *                  var wrapperH = size.wrapperH-------------容器的高度<br>
 *                  var scrollerW = size.scrollerW-----------滚动层的宽度<br>
 *                  var scrollerH = size.scrollerH-----------滚动层的高度<br>
 *                  var maxScrollX = size.maxScrollX---------滚动层最大可以滚动X向的距离<br>
 *                  var maxScrollY = size.maxScrollY---------滚动层最大可以滚动的Y向距离<br>
 *                  var minScrollY = size.minScrollY---------滚动层最小可以滚动的Y向距离
 *          </li>
 *          <li>
 *              disable:禁止滚动<br>
 *              cmp.listView("#container").disable();
 *          </li>
 *          <li>
 *              enable:恢复滚动<br>
 *              cmp.listView("#container").enable();
 *          </li>
 *     </ul>
 */





    
Top