[技术博客] 前端相关

模版引擎原理

  • 模版引擎是为了让数据与界面相互分离而出现的工具,使用模版引擎进行开发,能够提高相应的开发效率,同时对代码复用率的提升效果也非常显著。一般来说,模版引擎有自己相应的标记语言。模版引擎会解析相应的标记语言,然后将数据渲染进生成的html页面之中。

    模版文件 + 渲染的数据 = 最终页面内容

themyleaf模版引擎实例

  • 在我们的项目迭代中,前端代码所采用的模版引擎就是themyleaf,themyleaf是一个开源的java模版引擎库。
  • themyleaf相对于其他模版引擎的区别在于,themyleaf基于相关xml标签和属性去定义模版的处理逻辑,而不是直接在模版中编辑相关的代码。
  • 因为themyleaf的上述优势,所以themyleaf的文本文件本身也是格式良好的html文件,并且可以直接被浏览器打开进行相关内容的浏览。

themyleaf在phyweb项目中的应用实例

  • 帮助后端同学和新加入的同学熟悉项目中相关内容的使用。
  • 首先项目前端的整体结构为
-resources
--static
----css
----js
----script
----......
--templates
----*.html
  • 从上述代码结构中可以看出,前端模块中,主要将相关的代码文件存放在static和templates文件中。
  • templates文件夹中存放的为相关的前端内容页面,而static文件夹中存放的是相关的css和js文件,以及alpha阶段迭代的物理实验脚本内容。
  • 一般开发新的前端页面之时,可以在templates的html中写好相应的模版内容,然后再与后端的同学对接相应的接口,将后端获取的数据再渲染到相应的html模版文件之中。
  • themyleaf获取数据实例
<div class="profile-info-value">
    <span th:text="${user.getSex() != null} ? ${user.getSex().getValue()} : '暂未设置'">Sex</span>
</div>

<!-- 该段内容为user-center页面中的相关内容,从后端获取到user对象后,通过调用user对象的方法,判断如果不为null,则显示user.getSex().getValue()的内容,否则则会显示暂未设置的内容 -->

<tbody>
    <tr th:each="rept : ${reportTemplates}">
        <td class="center aligned" th:text="${rept.getExperiment_id()}">Experiment ID</td>
        <td class="center aligned" th:text="${rept.getExperiment_name()}">Experiment Name</td>
        <td class="center aligned">
            <div class="ui buttons mini" th:id="${'experiment-data-' + rept.getExperiment_id()}" th:attr="
                    data-prepare-pdf=${rept.getPrepare_link()}, 
                    data-experiment-id=${rept.getExperiment_id()},
                    data-db-id=${rept.getId()}">
                <button class="ui green basic button btn-view-pdf" style="padding: .45em .8em">查看文档</button>
                <button class="ui blue basic button btn-input-data" style="padding: .45em .8em">录入数据</button>
                <button class="ui red basic button disabled btn-gen-report" style="padding: .45em .8em">生成报告</button>
            </div>
        </td>
    </tr>
</tbody>

<!-- 该段代码在themyleaf中属于相应的循环标记,后端传入的reportTemplates属于相应的Collections类,通过themyleaf的each标记语句可以对集合类的内容进行遍历,通过该段代码可以生成所有实验报告操作栏和展示栏。 -->

phyweb在原有的基础上,如何开发新页面:

  • 首先,因为我们的前端页面基本都有相同的页脚与导航栏等相关内容,通过themyleaf将导航栏与页脚提取出来,抽象成了base.html的内容。
  • base.html中的内容主要为页面导航栏与页脚的相关内容,在开发其余页面之时,可以不用进行重写。开发新页面之时,只要在新页面进行相应的导入即可。导入方式为
<!-- 在html开头声明时,加入layout:decorator="base"来导入相应的base页面 -->
<html xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.w3.org/1999/xhtml" layout:decorator="base">
  • 在写页面中的具体内容之时,可以通过在新页面中重写base.html文件的相应模块的到相关内容,具体操作为:
<!-- 重写该块相关内容来进行展示 -->
<th:block layout:fragment="content">
    ....
    .....
    .....
    ....
</th:block>
  • 写好之后,新的前端页面就此产生了。同时要查看相应效果的话,并不是很推荐用浏览器直接查看相关html页面,最好能够在后台起一个相关的控制器,然后访问相应的路径,自己进行测试页面的展示效果。

猜你喜欢

转载自www.cnblogs.com/mizhiniurou/p/10859727.html