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

2023-11-23 15:30

本文主要是介绍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 {@InjectSystemInService srv;@InjectDepartmentService 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 片段 systemDetailString 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

这篇关于Beetl 提供俩种方式来显示实现局部更新的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/418907

相关文章

基于Python Playwright进行前端性能测试的脚本实现

《基于PythonPlaywright进行前端性能测试的脚本实现》在当今Web应用开发中,性能优化是提升用户体验的关键因素之一,本文将介绍如何使用Playwright构建一个自动化性能测试工具,希望... 目录引言工具概述整体架构核心实现解析1. 浏览器初始化2. 性能数据收集3. 资源分析4. 关键性能指

使用Redis快速实现共享Session登录的详细步骤

《使用Redis快速实现共享Session登录的详细步骤》在Web开发中,Session通常用于存储用户的会话信息,允许用户在多个页面之间保持登录状态,Redis是一个开源的高性能键值数据库,广泛用于... 目录前言实现原理:步骤:使用Redis实现共享Session登录1. 引入Redis依赖2. 配置R

SpringBoot实现RSA+AES自动接口解密的实战指南

《SpringBoot实现RSA+AES自动接口解密的实战指南》在当今数据泄露频发的网络环境中,接口安全已成为开发者不可忽视的核心议题,RSA+AES混合加密方案因其安全性高、性能优越而被广泛采用,本... 目录一、项目依赖与环境准备1.1 Maven依赖配置1.2 密钥生成与配置二、加密工具类实现2.1

Nginx进行平滑升级的实战指南(不中断服务版本更新)

《Nginx进行平滑升级的实战指南(不中断服务版本更新)》Nginx的平滑升级(也称为热升级)是一种在不停止服务的情况下更新Nginx版本或添加模块的方法,这种升级方式确保了服务的高可用性,避免了因升... 目录一.下载并编译新版Nginx1.下载解压2.编译二.替换可执行文件,并平滑升级1.替换可执行文件

在Java中实现线程之间的数据共享的几种方式总结

《在Java中实现线程之间的数据共享的几种方式总结》在Java中实现线程间数据共享是并发编程的核心需求,但需要谨慎处理同步问题以避免竞态条件,本文通过代码示例给大家介绍了几种主要实现方式及其最佳实践,... 目录1. 共享变量与同步机制2. 轻量级通信机制3. 线程安全容器4. 线程局部变量(ThreadL

Django中的函数视图和类视图以及路由的定义方式

《Django中的函数视图和类视图以及路由的定义方式》Django视图分函数视图和类视图,前者用函数处理请求,后者继承View类定义方法,路由使用path()、re_path()或url(),通过in... 目录函数视图类视图路由总路由函数视图的路由类视图定义路由总结Django允许接收的请求方法http

Python yield与yield from的简单使用方式

《Pythonyield与yieldfrom的简单使用方式》生成器通过yield定义,可在处理I/O时暂停执行并返回部分结果,待其他任务完成后继续,yieldfrom用于将一个生成器的值传递给另一... 目录python yield与yield from的使用代码结构总结Python yield与yield

python使用Akshare与Streamlit实现股票估值分析教程(图文代码)

《python使用Akshare与Streamlit实现股票估值分析教程(图文代码)》入职测试中的一道题,要求:从Akshare下载某一个股票近十年的财务报表包括,资产负债表,利润表,现金流量表,保存... 目录一、前言二、核心知识点梳理1、Akshare数据获取2、Pandas数据处理3、Matplotl

pandas数据的合并concat()和merge()方式

《pandas数据的合并concat()和merge()方式》Pandas中concat沿轴合并数据框(行或列),merge基于键连接(内/外/左/右),concat用于纵向或横向拼接,merge用于... 目录concat() 轴向连接合并(1) join='outer',axis=0(2)join='o

shell脚本批量导出redis key-value方式

《shell脚本批量导出rediskey-value方式》为避免keys全量扫描导致Redis卡顿,可先通过dump.rdb备份文件在本地恢复,再使用scan命令渐进导出key-value,通过CN... 目录1 背景2 详细步骤2.1 本地docker启动Redis2.2 shell批量导出脚本3 附录总