当前位置: 首页 > news >正文

Beetl 提供俩种方式来显示实现局部更新

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

提供俩种方式来显示用户列表 
第一种采用beetl-ajax,进入该页面能立即看到第一页数据,下一页后异步加载html片段 
第二种采用经典的json方式,进入该页面后,发起ajax请求,异步加载第一页数据。下一页后异步加载json数据再用JS转成html片段 
代码在:http://git.oschina.net/xiandafu/beetlajax 
性能测试感觉差不多,至于开发效率,我更喜欢beetl-ajax 这种模板引擎占主导方式(我不喜欢太多的js)

<html>
<head>
<script src="${ctxPath}/resource/js/jquery-2.1.3.min.js"></script>
<script src="${ctxPath}/resource/js/time.js"></script>
<script>
$(document).ready(function(){
	  loadTable(1);
	  
	  $(document).on('click','.page',function(){
	  	var action = $(this).html();
	  	var current = parseInt($("#current").html());
	  	var page = current;
	  	if(action=="next"){
	  		page++;
	  	}else{
	  		page--;
	  	}
	  	loadTable(page);
	  	
	  });
	});
	
	function loadTable(page){
		 startTime();
		 $.post("beetlajax_data.html",{'page':page},function(result){
			 
			 $("tbody").children().remove();
			 var array = eval('(' + result + ')');			 
			 for(var i=0;i<array.length;i++){
				var item = array[i];
				var tr = "<tr><td>"+item.id+"</td><td>"+item.name+"</td></tr>";
				$(tr).appendTo("tbody");
				//$("tbody").appendTo(tr);
			 }
			 endTime();
		 });
		 $('#current').html(page);
		 
	}
	
	
	
	

</script>
</head>
<body>
这是一个jsonajax测试页面,加载时间是: ${date(),'yyyy-MM-dd:hh:mm:ss'}
<p>
<div id="table-container" >


<table>
	<thead><tr><td width=100>id</td><td width=100>姓名</td></tr></thead>
	<tbody></tbody>
	
</table>

当前页面<span id="current">1</span><span style="width:20px"></span> 
<a href="#"><span  class="page">next</span></a> <a href="#" ><span  class="page">pre</span></a> 
<br/>
耗时<span id="time" ></span>

</div>
</body>
</html>

 

 

<html>
<head>
<script src="${ctxPath}/resource/js/jquery-2.1.3.min.js"></script>
<script src="${ctxPath}/resource/js/time.js"></script>
<script>
$(document).ready(function(){
	  $(document).on('click','.page',function(){
	  	var action = $(this).html();
	  	var current = parseInt($("#current").html());
	  	var page = current;
	  	if(action=="next"){
	  		page++;
	  	}else{
	  		page--;
	  	}
	  	//加载html,table-container的内容将从后台加载
	  	startTime();
	  	$("#table-container").load("beetlajax.html?ajaxCmd=userTable",{"page":page},function(){
	  		endTime();	  		
	  		
	  	});
	  	
	  	
	  });
	});

</script>
</head>
<body>
这是一个beetl-ajax测试页面,加载时间是: ${date(),'yyyy-MM-dd:hh:mm:ss'}
<p>
<div id="table-container" >
<%
#ajax userTable: {
%>

<table>
	<tr><td width=100>id</td><td width=100>姓名</td></tr>
	<%for(user in users){%>
	<tr><td>${user.id}</td><td>${user.name}</td></tr>
	<%}%>
</table>

当前页面<span id="current">${page!1}</span><span style="width:20px"></span> 
<a href="#"><span  class="page">next</span></a> <a href="#" ><span  class="page">pre</span></a> 
<%
}
%>
</div>
耗时<span id="time" ></span>
</body>
</html>

 

第三种 方式

后端直接生成好,前端更新 dom 节点

 

xtqd.js

 

$(function () {
	var query = {
			systemName:'',
			sceneId:'',
			departmentId: '',
			netId: ''
	}
	$('#search').click(function (){
	    var systemName = $("#searchData").val().trim();
	    query.systemName=systemName;
		search()
	
	})
	
	function search() {
		var data=query;
		$.ajax({
	        type: 'post',
	        url: "/daping/query	",
	        data:query,
	        dataType: 'json',
	        cache: false,
	        success: function (response) {

	        	$(".floors-list .floor").empty();
	        	$(".floors-list .floor").append(response.systemDetail);
//	        	$(".jf-reply-list > li:last-child").before(ret.replyItem);
//	        	alert("zwh");
	        },
	        error: function (res) {
	            console.log('数据加载失败,请检查网络是否通畅');
	        }
		});
	}
	
	$('.scene .cate_detail_con .cate_detail_con_lk').click(function (){
		$(this).addClass('active').siblings().removeClass('active');
		query.sceneId = $(this).attr('data-id');
		search()
	})
	
	$('.department .cate_detail_con .cate_detail_con_lk').click(function (){
		$(this).addClass('active').siblings().removeClass('active');
		query.departmentId = $(this).attr('data-id');
		search()
	})
	
	$('.net .cate_detail_con .cate_detail_con_lk').click(function (){
		$(this).addClass('active').siblings().removeClass('active');
		query.netId = $(this).attr('data-id');
		search()
	})
}) 

 

xtqd.html

<!DOCTYPE html>
<html>
<head>
    <meta name="robots" content="all"/>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <meta name="format-detection" content="telephone=no">
    <meta name="apple-mobile-web-app-capable" content="yes" />
    <meta name="apple-mobile-web-app-status-bar-style" content="black" />
    <meta name="keywords" content="中国电科-智慧城市指挥中心"/>
    <meta name="description" content="中国电科-智慧城市指挥中心"/>
    <title>中国电科-智慧城市指挥中心-系统清单</title>
	<link href="/assets/img/favicon.ico" rel="icon" type="image/x-icon" />
    <link href="/assets/css/layout.css" rel="stylesheet" type="text/css"/>
    <link href="/assets/css/reset.css" rel="stylesheet" type="text/css"/>
    <link href="/assets/css/ftqzhcsxtqd.css" rel="stylesheet" type="text/css"/>
<!--让IE6、IE7、IE8、IE9支持html5和css3开始-->    
<!--[if lt IE 9]>
<script src="/assets/js/html5.js" type="text/javascript" language="javascript"></script>
<script src="/assets/js/selectivizr.js" type="text/javascript" language="javascript"></script>
<script src="/assets/js/PIE.js" type="text/javascript" language="javascript"></script>

<![endif]-->
<!--让IE6、IE7、IE8、IE9支持html5和css3结束-->         
    <!--IE6支持png图片透明开始-->
    <!--[if IE 6]>
    <script src="/assets/js/DD_belatedPNG.js" mce_src="DD_belatedPNG.js" type="text/javascript"></script>
    <script type="text/javascript">
    	
        DD_belatedPNG.fix('a, div, ul, img, input, span');
    </script>
    <![endif]-->
<!--IE6支持png图片透明结束-->
	<!--自定义js文件开始-->
	<!--自定义js文件结束-->   
	<script type="text/javascript" src="/assets/jquery/jquery.min-v1.12.4.js"></script>
	<script type="text/javascript" src="/assets/js/jfinal-com-v1.0.js?v=16"></script>
	 
</head>
<body>
<!--页面开始-->
<div class="page page_a bg"> 
	 <!--头部开始-->                 
	 <div class="page_top bg">
		<a  class="title" target="" href="index.html" title="福田区智慧城市智慧中心"></a>
	 </div>	
	 <!--头部结束-->
	 <!--系统清单开始-->                 
	 <div class="system-list-area">
	 	 <div class="condition-screen">
			<div class="condition-screen-wrap bg">
				<div class="condition-screen-title"><i class="icon icon-screen bg"></i>条件筛选</div>
				<div class="search">
					<a class="search-btn" href="javascript:void(0)" id="search" title="搜索">搜索</a>
					<span class="search-value-bg bg"><i class="icon icon-search bg"></i><input id="searchData" name="" type="text" value="" /></span>
				</div>
			</div>     
	 	 </div> 
	 	 <div class="screen-area">	 	 	 		 	 	
	 	 	 <ul class="cate-menu">
	 	 	 	 <li class="cate-menu-item scene">
	 	 	 	 	 <div class="cate-detail">
	 	 	 	 	 	 <dl class="cate_detail_item">
							<dt class="cate_detail_tit">场景类型:</dt>
							<dd class="cate_detail_con">
								<a href="javascripte:void(0)" class="cate_detail_con_lk" flag="a1" title="全部">全部</a>
								#for(s : sceneList)
									<a href="javascripte:void(0)" data-id="#(s.value)" class="cate_detail_con_lk" flag="a1" title="#(s.name)">#(s.name)</a>
								#end
							</dd>	 	 	 	 
	 	 	 	 	 	 </dl>	 	 	 	 	 	 
	 	 	 	 	 </div>	 	 	 	 	 	 
	 	 	 	 </li>
	 	 	 	 
	 	 	 	 <li class="cate-menu-item department">
	 	 	 	 	 <div class="cate-detail">
	 	 	 	 	 	 <dl class="cate_detail_item">
							<dt class="cate_detail_tit">所属部门:</dt>
							<dd class="cate_detail_con">
								<a href="javascripte:void(0)" class="cate_detail_con_lk" flag="a3" title="全部">全部</a>
								#for(s : departmentList)
								    <a href="javascripte:void(0)" data-id="#(s.id)" class="cate_detail_con_lk" flag="a3" title="#(s.name)">#(s.name)</a>
								#end
							</dd>
	 	 	 	 	 	 </dl>
	 	 	 	 	 </div>	 	 	 	 	 	 
	 	 	 	 </li>	
	 	 	 	 <li class="cate-menu-item net">
	 	 	 	 	 <div class="cate-detail">
	 	 	 	 	 	 <dl class="cate_detail_item">
							<dt class="cate_detail_tit">网络类型:</dt>
							<dd class="cate_detail_con">
								<a href="javascripte:void(0)" class="cate_detail_con_lk" flag="a4" title="全部">全部</a>
								#for(s : dictList)
								    <a href="javascripte:void(0)" data-id="#(s.value)"  class="cate_detail_con_lk" flag="a4" title="#(s.name)">#(s.name)</a>
								#end
							</dd>
	 	 	 	 	 	 </dl>	 	 	 	 	 	 
	 	 	 	 	 </div>	 	 	 	 	 	 
	 	 	 	 </li>	 	 	 	 
	 	 	 </ul>
	 	 </div>
	 	 <div class="floors-list">
			<div class="floor">
				<h3 class="floorhd">接入系统</h3>
				<div class="cells flex">
					#for(s : systemInList)
						<div class="cell" title="#(s.name)">
							<div class="cell__hd">#(s.name)</div>
							<div class="cell__bd">
								<div class="department">
									<span>所属部门:</span>
									<span>#(s.departmentname)</span>
								</div>
								<div class="platform">
									<span>所属场景:</span>
									<span>#(s.scene)</span>
								</div>
							</div>
							<div class="cell__ft">
								#for(net:s.nets)
									<span class="service-livelihood">#(net.name)</span>
								#end
							</div>
						</div>
					#end
				</div>
			</div>
	 	 </div>	
	 </div>	
	 <!--系统清单结束-->
</div>
<!--页面结束-->
<script src="/assets/js/xtqd.js" type="text/javascript"></script>

</body>
</html>

 

DapingController

 

package com.jfinal.club.daping;

import java.util.List;

import com.jfinal.aop.Inject;
import com.jfinal.club._admin.systemin.SystemInService;
import com.jfinal.club.common.model.Department;
import com.jfinal.club.common.model.Dicts;
import com.jfinal.club.common.model.SystemIn;
import com.jfinal.club.department.DepartmentService;
import com.jfinal.core.Controller;
import com.jfinal.kit.Ret;

public class DapingController extends Controller {
	@Inject
	SystemInService srv;
	@Inject
	DepartmentService departmentService;
	
	/**
	 * 显示大屏界面
	 */
	public void index() {
		
		render("index.html");
	}
	
	/**
	 * 显示系统清单
	 */
	public void xtqd() {
		//场景类型
		List<Dicts> sceneList=srv.getCommonDictList("value, name","systemin","scene");
		setAttr("sceneList", sceneList);
		//所属部门
		List<Department> departmentList=departmentService.getDepartmentList();
		setAttr("departmentList", departmentList);    
		//网络类型
		List<Dicts> dictList=srv.getCommonDictList("value, name","systemin","net");
		setAttr("dictList", dictList);   
		
		String systemName = getPara("systemName"); 
		String sceneId = getPara("sceneId"); 
		String departmentId = getPara("departmentId"); 
		String netId = getPara("netId"); 
		List<SystemIn> getSystemInList=srv.getSystemInList(systemName,sceneId,departmentId,netId);
		
		setAttr("systemInList", getSystemInList);
		
		render("xtqd.html");
		
	}
	
	/**
	 * 显示系统清单
	 */
	public void query() {
		
		String systemName = getPara("systemName"); 
		String sceneId = getPara("sceneId"); 
		String departmentId = getPara("departmentId"); 
		String netId = getPara("netId"); 
		
		List<SystemIn> getSystemInList=srv.getSystemInList(systemName,sceneId,departmentId,netId);
		Ret ret= Ret.ok("systemInList", getSystemInList);
		
		// 用模板引擎生成 HTML 片段 systemDetail
		String systemDetail = renderToString("systemDetail.html", ret);
				
		ret.set("systemDetail", systemDetail);
		
		renderJson(ret);
		
	}

}

 

systemDetail.html

<h3 class="floorhd">接入系统</h3>
<div class="cells flex">
	#for(s : systemInList)
		<div class="cell" title="#(s.name)">
			<div class="cell__hd">#(s.name)</div>
			<div class="cell__bd">
				<div class="department">
					<span>所属部门:</span>
					<span>#(s.departmentname)</span>
				</div>
				<div class="platform">
					<span>所属场景:</span>
					<span>#(s.scene)</span>
				</div>
			</div>
			<div class="cell__ft">
				#for(net:s.nets)
					<span class="service-livelihood">#(net.name)</span>
				#end
			</div>
		</div>
	#end
</div>



 

参考官方文档

http://ibeetl.com/guide/#beetl 

  • 4.12. 整合ajax的局部渲染技术

 

 

 

 

 

 

 

 

转载于:https://my.oschina.net/zhongwenhao/blog/3027844

相关文章:

  • core_framework —— 基于libev的轻量级lua网络开发框架
  • MyCAT水平分库
  • 织梦CMS模板中dede标签使用php和if判断语句的方法
  • 2019第十四届中国竞争情报国际年会将于4月在上海召开
  • 移动互联网下半场,iOS开发者如何“高薪”成长?
  • 判断是手机端还是PC端的代码
  • linux分区方案
  • 邮件加密之SMIME
  • 微信公众平台生成二维码海报是如何做到的?
  • idea thymeleaf 表达式模板报红波浪线
  • 呼叫中心系统常见的数据对接接口方式
  • JAVA8给我带了什么——lambda表达
  • websocket 二合一
  • Python入门教程100天:Day05-练习总结
  • vue-cli3 less全局变量使用
  • [译] React v16.8: 含有Hooks的版本
  • Angular 响应式表单之下拉框
  • django开发-定时任务的使用
  • express + mock 让前后台并行开发
  • gulp 教程
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • js中forEach回调同异步问题
  • Linux CTF 逆向入门
  • MySQL QA
  • Python十分钟制作属于你自己的个性logo
  • Ruby 2.x 源代码分析:扩展 概述
  • uva 10370 Above Average
  • 分布式熔断降级平台aegis
  • 深入浏览器事件循环的本质
  • 小试R空间处理新库sf
  • 译有关态射的一切
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • #《AI中文版》V3 第 1 章 概述
  • #DBA杂记1
  • #Linux(权限管理)
  • $.ajax,axios,fetch三种ajax请求的区别
  • (WSI分类)WSI分类文献小综述 2024
  • (二)pulsar安装在独立的docker中,python测试
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (转)LINQ之路
  • (转)用.Net的File控件上传文件的解决方案
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • .net core Swagger 过滤部分Api
  • /etc/sudoers (root权限管理)
  • /usr/local/nginx/logs/nginx.pid failed (2: No such file or directory)
  • ::前边啥也没有
  • @Autowired注解的实现原理
  • @JSONField或@JsonProperty注解使用
  • @vue/cli 3.x+引入jQuery
  • [ linux ] linux 命令英文全称及解释
  • [ vulhub漏洞复现篇 ] ECShop 2.x / 3.x SQL注入/远程执行代码漏洞 xianzhi-2017-02-82239600
  • [Android]使用Android打包Unity工程
  • [C语言]——C语言常见概念(1)