使用LeanCloud的分页查询

1.话不多说上代码:product-list.html


<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<script type="text/javascript" src="jquery/jquery-3.2.0.min.js"></script>
		<style>
			tr,td{
				border: 1px solid #9CF
			}
			td{
				width:50px;
			}
		</style>
	</head>
	<body>
		<table style="border: 1px solid #9CF" align="center" id="dataTable">
			<tr>
				<td>类名</td>
				<td >1</td>
				<td>类型</td>
				<td id="classtype" style="width: 150px;" name="classtype">任意该类型的值</td>
				<td>值</td>
				<td >3</td>
				<td><input type="button" id="delete" οnclick="deleteRow(this)" value="删除" /></td>
				<td><input type="button" id="edit" class="edit" value="编辑" /></td>
			</tr>
		</table>
		<input type="button" name="tb" id="tb" value="添加一行" />
		<input type="button" name="getData" id="getData" οnclick="GetInfoFromTable();" value="获取表格数据" />
		<input type="button" name="getSelectData" id="getSelectData" οnclick="GetSelect();" value="获取select" />
		<script>
		$('#test1').bind('input propertychange', function() {
			var text = $('#test1').val();
			document.getElementById("test").value = text;
		});
		$('#btnSet').click(function(){
			var text = $('#test1').val();
			document.getElementById("test").value = text;
		});
		function GetSelect(){
			alert($("#typeSelect").val());
			
		}
		</script>
		<script>
			$('#tb').click(function(){
				var innerTD = "<tr><td>类名</td><td>name1</td><td>类型</td><td>int</td><td>值</td><td>2</td><td><input type='button' id='delete' οnclick='deleteRow(this)' value='删除' /></td><td><input type='button' id='edit' class='edit' value='编辑' /></td></tr>";
        		$("#dataTable").append(innerTD);
        		$("#dataTable").on("click", ".edit", function(){});  
			});
			
			function deleteRow(r){
			    var i=r.parentNode.parentNode.rowIndex;
			    document.getElementById('dataTable').deleteRow(i);
			}
			
			$("body").on('click',"[class='edit']",function(){
				str = $(this).val()=="编辑"?"确定":"编辑";  
		        $(this).val(str);   // 按钮被点击后,在“编辑”和“确定”之间切换
		        var i = 0;
		        $(this).parent().siblings("td").each(function() {  // 获取当前行的其他单元格
		            obj_text = $(this).find("input:text");    // 判断单元格下是否有文本框
		            obj_btn = $(this).find("input:button");    // 判断单元格下是否有按钮
		            obj_select = $(this).find("select");	// 判断单元格下是否有select
		            if(!obj_text.length && !obj_btn.length && !obj_select.length){   // 如果没有文本框,则添加文本框使之可以编辑
						if(i==1 || i==5){
							$(this).html("<input type='text' value='"+$(this).text()+"'>");
						}
						if(i==3){
							var t = $(this).text().trim();
							var st = "<select id='typeSelect' name='typeSelect'>";
							if(t == "任意该类型的值"){
								st = st + "<option value='0' selected>任意该类型的值</option><option value='1'>基本类型</option>";
							}
							else{
								st = st + "<option value='0'>任意该类型的值</option><option value='1' selected>基本类型</option>";
							}
							st = st + "</select>"
							$(this).html(st);
						}
			        }
		            else{
		            	if(i==1 || i==5){
							$(this).html(obj_text.val());  // 如果已经存在文本框,则将其显示为文本框修改的值
						}
						if(i==3){
							$(this).html($("#typeSelect").find("option:selected").text());
						}
		            } 
		            i++;
		        });
			});
			
			function GetInfoFromTable() {
				var tableInfo = "[";
			    var tableObj = document.getElementById("dataTable");
			    for (var i = 0; i < tableObj.rows.length; i++) {    //遍历Table的所有Row
			    	tableInfo += "{"
			        for (var j = 0; j < tableObj.rows[i].cells.length; j++) {   //遍历Row中的每一列
			        	if(j%2==0){ //key
			        		if(tableObj.rows[i].cells[j].innerText == ""){
			        			break;
			        		}
			        		else{
			        			if(j==0){
			        				tableInfo += "\"className\":";
			        			}
			        			if(j==2){
			        				tableInfo += "\"type\":";
			        			}
			        			if(j==4){
			        				tableInfo += "\"value\":";
			        			}
			        		}
			        	}
			            else{  //value
		            		if(j==3){
		            			if(tableObj.rows[i].cells[j].innerText.trim() == "任意该类型的值"){
		            				tableInfo += parseInt("0") + ",";
		            			}
		            			if(tableObj.rows[i].cells[j].innerText.trim() == "基本类型"){
		            				tableInfo += parseInt("1") + ",";
		            			}
		            		}
		            		else{
		            			tableInfo += "\"" + tableObj.rows[i].cells[j].innerText + "\",";
		            		}
			            }
			        }
			        tableInfo += "},";
			    }
			    tableInfo = tableInfo + "]";
			    alert(tableInfo.replace(/\,}/g,"}").replace(/\,]/g,"]"));
			    //return tableInfo.replace(/\,}/g,"}").replace(/\,]/g,"]");
			}
		</script>
	</body>
</html>



2.接下来就是js部分了(很多需要注意的地方,已经在代码里写了注释):product-list.js

//定义全局map
var map = new Map();
map.set("03002", "北京");
map.set("03003", "上海");
map.set("03004", "广州");
map.set("03005", "深圳");
map.set("03006", "深圳");




/**
 * 查询
 * @param {Object} pageNo 当前页码
 */
function toSearch(pageNo) {
	if(typeof(pageNo) == "undefined") {
		pageNo = 1;
	}
	$('#productList').empty();
	var startDate=$("#dpd1").val();
	var endDate=$("#dpd2").val();
	var scenicName=$("#scenic").val();
	
	var totalNum;
	var pageSize = 15;
	var cql=getCQL('01',startDate,endDate,scenicName,pageSize,pageNo);
	console.log("查询记录条数的【cql】:"+cql);
	AV.Query.doCloudQuery(cql).then(function(data) {
		console.log(data);
		var bean = new Page();
		bean.setPageNo(pageNo); //设置当前页  
		bean.setTotalSize(data.count); //设置总页数  
		bean.setPageSize(pageSize); //设置每页显示的条数
		bean.setPageDiv("pageDiv"); //设置展示分页控件的容器  
		bean.setFn("toSearch"); //点击按钮的回调函数  
		bean.doStartPage();
	}, function(error) {
		console.log(error);
	});
	
	cql=getCQL('02',startDate,endDate,scenicName,pageSize,pageNo);
	console.log("查询数据的【cql】:"+cql);
	AV.Query.doCloudQuery(cql).then(function(data) {
		var productList=generalTr(data);
		console.log("表格拼装HTML:"+productList);
		$('#productList').append(productList);
	}, function(error) {
		console.log(error);
	});
	
};

/**
 * 通过城市代码获取城市名称
 * @param {Object} code
 */
function getScenicNameByCode(code) {

	var value = map.get(code);
	if(typeof(value) != "undefined") {
		return value;
	} else {
		return code;
	}
}

function getNumber(num) {
	if(num == "100") {
		return 1;
	} else if(num == "-100") {
		return -1;
	} else {
		return num;
	}
}

function getReason(reason) {
	if(reason == null) {
		return "无";
	} else {
		return reason;
	}
}

/**
 * 生成select 的 option
 */
$(function() {
	$("#scenic").prepend("<option value=''>所有城市</option>");
	var filterMap = new Map();
	map.forEach(function(value, key) {
		var isContainsValue = (null == filterMap.get(value) || "" == filterMap.get(value)) ? true : false;
		if(isContainsValue) {
			filterMap.set(value, value);
			$("#scenic").append("<option value='" + value + "'>" + value + "</option>");
		}
	});
	
});

/**
 * 通过value 取 keyList
 * @param {Object} value
 */
function getKeySet(value) {
	var set = new Set();
	map.forEach(function(val, key) {
		if(value == val) {
			set.add(key);
		}
	});
	return set;
}


/**
 * 
 * @param {Object} businessType 业务类型:01-查询总条数,02-查询数据
 * @param {Object} startDate
 * @param {Object} endDate
 * @param {Object} scenicName
 * @param {Object} pageSize
 * @param {Object} pageNo
 */
function getCQL(businessType,startDate,endDate,scenicName,pageSize,pageNo){
	var start;
	if(businessType=='01'){
		//count 不支持 distinct 等语法。仅限 count(*) 和 count(objectId)。
		start='select count(objectId) from city ';
	}else{
		start='select * from city ';
	}
	
	var where='where objectId is exists ';
	
	if(null!=scenicName&&""!=scenicName){
		var scenicKeys=getKeySet(scenicName);
		where+='and user in (';
		var i=0;
		scenicKeys.forEach(function(key){
			if(i==0){
				where+='"'+key+'"';
			}else{
				where+=',"'+key+'"';
			}
			i++;
		});
		where+=') ';
	}
	
	//内置函数 date() 接收的日期格式必须是 `` 的 UTC 时间。
	if(null!=startDate&&""!=startDate){
		where+='and createdAt>=date("'+startDate+'T00:00:00.000Z") ';
	}
	if(null!=endDate&&""!=endDate){
		where+='and createdAt<=date("'+endDate+'T00:00:00.000Z") ';
	}
	if(businessType=='01'){
		return start+=where;
	}else{
		//普通查询一样,limit 默认为 100,最大 1000
		var startLine=(pageNo - 1) * pageSize;
		return start+=where+'limit '+startLine+','+pageSize;
	}
}

/**
 * 通过返回的数据拼装 Tr
 * @param {Object} data
 */
function generalTr(data){
	var productList = "";
	var products=data.results;
	products.forEach(function(leaseRec) {
		var productTitle = leaseRec.get('user');
		var productprice = leaseRec.get('discountRate');
		var productRemark = leaseRec.get('remark');
		var releaseTime = (leaseRec.createdAt.getMonth() + 1) + '/' + leaseRec.createdAt.getDate() + '/' + leaseRec.createdAt.getFullYear();
		var product = "<tr><td>" + getScenicNameByCode(productTitle) + "</td><td>" + getReason(productRemark) + "</td><td>" + getNumber(productprice) + "</td><td>" + releaseTime + "</td></tr>";
		productList = productList + product;
	});
	return productList
}



3.附上项目demo下载地址:http://download.csdn.net/detail/after95/9801032


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值