从 art-template 模版维护到动态加载的思考

简介:

  自己用 art-template 有些年头了,最近在培养团队学习 art-template 使用,发现有一个痛点比较难解决。

  比如有一个模版,我们可以直接写在页面中,像这样:

1
2
3
4
5
6
< script  id="appbtnTemp" type="text/html">
     < div  id="<%=id%>" class="appbtn" title="<%=title%>" appid="<%=appid%>" realappid="<%=realappid%>" type="<%=type%>">
         < img  src="<%=imgsrc%>" alt="<%=title%>" style="width:<%=appsize%>px;height:<%=appsize%>px;">
         < span  style="width:<%=appsize+10%>px;"><%=title%></ span >
     </ div >
</ script >

  但如果这是个公用的模版,在很多页面需要用到,那就不能直接写在页面中了,不然就得复制很多份了,那就只能写到 js 文件里,做为一个公用函数。

1
2
3
4
5
6
var  appbtn = template.compile(
     '<div id="<%=id%>" class="appbtn" title="<%=title%>" appid="<%=appid%>" realappid="<%=realappid%>" type="<%=type%>">' +
         '<img src="<%=imgsrc%>" alt="<%=title%>" style="width:<%=appsize%>px;height:<%=appsize%>px;">' +
         '<span style="width:<%=appsize+10%>px;"><%=title%></span>' +
     '</div>'
);

  这样子虽然解决了公用的问题,但代码就变得难以维护了,毕竟是在 js 文件里写 html 代码,代码高亮提示没了,而且都是字符串拼接,如果模版有修改,将会是一个可怕的问题。

  那有没有什么解决办法呢?我的第一个想法是把每个模版都写到独立的文件里,但在官网文档里看到浏览器版本不支持文件路径读取模版,那就自己改造下吧,让浏览器版本也支持文件加载读取模版。

  这里我的大致思路是通过 jquery 的 $.ajax() 去获取模版,读取到模版然后用 template.compile() 把模版编译成函数并储存好,如果再次调用模版,则不用重新去获取模版。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$( function (){
     var  cache = {};
     var  renderFile =  function (path, data){
         var  html;
         if (cache.hasOwnProperty(path)){
             html = cache[path](data);
         } else {
             $.ajax({
                 type:  'GET' ,
                 url: path,
                 dataType:  'text' ,
                 async:  false
             }).done( function (cb){
                 var  render = template.compile(cb);
                 html = render(data);
                 cache[path] = render;
             });
         }
         return  html;
     }
     renderFile( 'test.art' , {title:  '测试1' });
});

  下面是 test.art 文件

1
2
3
< div >
     < h1 ><%=title%></ h1 >
</ div >

  代码实现整体还是很 easy 的,这样修改之后,模版文件也可以统一管理了,既不会和页面混在一起,也不会和 js 混在一起。

  后续:

  在和 art-template 的作者交流后,作者给出两点解决方案:

1、如果用 webpack 结合 art-template-loader 就解决了这个问题了,它可以根据需要自动打包模板(而且是编译好的代码,不包含模板引擎)

2、我建议你使用 es6,至少模板这里可以用 es6 书写这样可以轻松的写多行字符串

HoorayOS - WEB桌面应用框架
这是一款备受好评的 Web 桌面应用框架,你可以用它二次开发出类似 Q+Web 这类的桌面应用网站,也可以开发出适用于各种项目的桌面管理系统。




    本文转自胡尐睿丶博客园博客,原文链接:http://www.cnblogs.com/hooray/p/6895343.html ,如需转载请自行联系原作者
相关文章
|
SQL 分布式计算 Hadoop
大数据行业部署实战1:Hadoop伪分布式部署
大数据行业部署实战1:Hadoop伪分布式部署
742 0
|
Java 数据库连接 数据库
探究Java中的MyBatis Plus注解 @OrderBy:优雅实现查询结果排序
在数据库查询中,对查询结果进行排序是常见的需求之一。MyBatis Plus作为一款强大的ORM框架,提供了注解 `@OrderBy`,使得开发者能够轻松实现查询结果排序,而无需手动编写复杂的排序语句。本文将详细介绍 `@OrderBy` 注解的用法及其在持久层开发中的应用。
2905 0
|
Linux 数据安全/隐私保护 Windows
操作系统实战-almalinux的安装过程
操作系统实战-almalinux的安装过程
2475 0
操作系统实战-almalinux的安装过程
|
JavaScript 网络架构
vue传参及接收参数
vue传参及接收参数
207 0
|
4天前
|
存储 关系型数据库 分布式数据库
PostgreSQL 18 发布,快来 PolarDB 尝鲜!
PostgreSQL 18 发布,PolarDB for PostgreSQL 全面兼容。新版本支持异步I/O、UUIDv7、虚拟生成列、逻辑复制增强及OAuth认证,显著提升性能与安全。PolarDB-PG 18 支持存算分离架构,融合海量弹性存储与极致计算性能,搭配丰富插件生态,为企业提供高效、稳定、灵活的云数据库解决方案,助力企业数字化转型如虎添翼!
|
15天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1309 5
|
1天前
|
监控 JavaScript Java
基于大模型技术的反欺诈知识问答系统
随着互联网与金融科技发展,网络欺诈频发,构建高效反欺诈平台成为迫切需求。本文基于Java、Vue.js、Spring Boot与MySQL技术,设计实现集欺诈识别、宣传教育、用户互动于一体的反欺诈系统,提升公众防范意识,助力企业合规与用户权益保护。