前言
     前后端开发分的越来越细化,为了方便前端工程师更好的调试后端工程师嵌套的代码,前后分离技术就出现了,简单理解其实就是Ajax异步将数据提供给JavaScript,由JavaScript进行迭代展现渲染成想要的效果,这样做还可以使页面数据异步化,页面展现时只需要加载页面结构及js、css、image等,而这些静态文件还可以通过CDN进行优化,缩短了打开页面白屏的时间,进一步加快了用户看到页面的速度,优点还是非常多的。
     前端MVVM框架有很多Vue.js、Angular2.js、React.js、juicer.js(ali)、artTemplate.js(tencent)、doT.js等等有很多,各有优势,前三个属于重量级功能大而全,而我的需求只需要简单迭代即可,所以选择后三个轻量级的,推荐使用juicer.js是阿里的而且支持Node.js,语法不太抽象很容易理解。
     无论那种框架实际应用时主要的功能就是循环、判断、输出这三个,下面我们根据日常需要撰写一下应用实例。
一、juicer的应用
官网地址:http://juicer.name/
1、基本语法
//变量输出${变量}
${var flag = "test"} //变量避免转义输出$${变量} //循环{@each}...{@/each}
{@each list as item}
//do something...
${item.prop}
{@/each}
{@each list as item, index}
//do something...
${index}
//此处的index代表当前索引
{@/each} //判断{@if}...{@/if}
{@if ${item.prop == 'a'}}
//do something...
{@else if}
//do something...
{@else}
//do something...
{@/if} //注释{# 内容} //辅助循环{@each i in range(m, n)}
{@each i in range(5, 10)}
${i} //输出5 6 7 8 9
{@/each} //嵌套模板{@include tpl, data}

2、引入js文件

<script type="text/javascript" src="~/static/js/jquery/jquery-min.js"></script><!--可以不用jquery,使用默认js语法即可-->
<script type="text/javascript" src="~/static/js/juicer/juicer-min.js"></script>

3、设置自定义标签

不同开发语言可能导致对不同的模板符号编译错误,我们可以自定义模板符号规则
//页面加载后设置自定义标签
$(function () {
juicer.set({
'tag::operationOpen': '{*', //操作标签-开
'tag::operationClose': '}', //操作标签-关
'tag::interpolateOpen': '${', //变量标签-开
'tag::interpolateClose': '}', //变量标签-关
'tag::noneencodeOpen': '$${', //禁止转义标签-开
'tag::noneencodeClose': '}', //禁止转义标签-关
'tag::commentOpen': '{#', //注释标签-开
'tag::commentClose': '}', //注释标签-关
'cache': true, //[默认开启]是否缓存模板编译结果,开启后会避免同一模板多次数据渲染时重复编译模板,减少编译模板所耗的时间
'script': true, //[默认开启]是否清除空白,清除模板中的空白,包括换行、回车等
'error handling': true, //[默认开启]是否处理错误
'detection': true //[默认开启]是否检测变量是否定义,开启后如果变量未定义,将用空白字符串代替
});
})

4、编写展示模版

<script id="tplAccountAll" type="text/template">
<thead>
<tr class="bg-warning">
<th class="text-center">账号</th>
<th class="text-center">现金余额</th>
<th class="text-center">冻结资金</th>
<th class="text-center">账号描述</th>
<th class="text-center">绑定手机</th>
<th class="text-center">绑定邮箱</th>
<th class="text-center">独立核算</th>
<th class="text-center">状态</th>
<th class="text-center">创建时间</th>
<th class="text-center">操作</th>
</tr>
</thead>
{*each list as item}
<tr>
<td class="text-primary">${item.AccountNo}</td>
<td class="text-right text-success">${item.Balance.toFixed(2)}</td>
<td class="text-right text-success">${item.FreezeBalance.toFixed(2)}</td>
<td class="text-center">${item.AccountDescription}</td>
<td class="text-center">${item.Mobile}</td>
<td class="text-center">${item.Email}</td>
<td class="text-center">${item.IsSelfFinanced}</td>
<td class='${item.Status == 1 ? "text-success" : "text-danger"} text-center'>${item.StatusName}</td>
<td class="text-center">${item.CreateTime}</td>
<td class="text-center">
{*if item.AccountNo != item.CustomerNo}
<a href="javascript:void(0)" onclick="updateStatus('${item.AccountNo}',${item.Status}, this)">[${item.StatusOperation}]</a>
{*/if}
<a href="~/AccountManage/GrantRuleToAccount?AccountNo=${item.AccountNo}" target="_blank">[分配权限]</a>
<a href="~/AccountManage/SetCreditLineLimit?AccountNo=${item.AccountNo}" target="_blank">[授信限额设定]</a>
<a href="javascript:void(0)" onclick="showPayBusInfo('${item.AccountNo}')">[查看授信余额]</a>
</td>
</tr>
{*/each}
</script>

5、渲染模版展示内容

<script type="text/javascript">
$(function () {
$.post("/AccountManage/AjaxGetAccountListData", function (data) {
data = { list: JSON.parse(data) };
console.log(data);
//获取模版
var tplAccountAll = $("#tplAccountAll").html();
//渲染数据
var htmlContent = juicer(tplAccountAll, data);
//显示内容
$("#showAccountAll").html(htmlContent);
});
})
</script>

二、doT的应用

 1、基本语法 
{{= }} for interpolation 输出
{{ }} for evaluation 代码块
{{~ }} for array iteration 迭代
{{? }} for conditionals 条件
{{! }} for interpolation with encoding 编码输出
{{# }} for compile-time evaluation/includes and partials
{{## #}} for compile-time defines

2、引入js文件

<script src="jquery.min.js"></script>
<script src="doT.min.js"></script>

3、编写展示模板

<script id="tmpBuyAndBuy" type="text/x-dot-template">
{{ if(it && it.length > 0){ }}
<div class="guessTit">
<div class="guessLine abs"></div>
<span class="abs w200">根据购物车的商品,为您推荐</span>
</div>
<div class="guseeBig">
<p class="t2">90%的妈妈还买了以下商品</p>
</div>
<div class="guessLoveCon">
<ul class="guessCon clearfix">
{{ for(var i = 0; i < it.length; i++){ }}
{{ var item = it[i]; }}
<li>
<a href="{{=item.GoodsShowUrl}}">
<div class="hotProImg rel">
<img src="{{=item.GoodsImgUrl}}" alt="">
{{?item.NationPic}}
<div class="hotProflag abs"><img src="{{=item.NationPic}}" alt=""></div>
{{?}}
</div>
<div class="gupt">{{=item.SellingPoint}}</div>
<div class="guessProTit gray">{{=item.GoodsName}}</div>
<div class="guessMoney clearfix">
<span class="s1">¥<i>{{=item.GoodsPriceInteger}}</i>.{{=item.GoodsPriceDecimal}}</span>
<span class="s2">¥{{=item.MarketPrice.toFixed(2)}}</span>
</div>
</a>
</li>
{{ } }}
</ul>
</div>
{{ } }}
</script>

4、渲染模版展示内容

<script type="text/javascript">
var jsBuyAndBuy = jsBuyAndBuy || {};
jsBuyAndBuy.GetData = function (goodsids) {
if (goodsids) {
$.post("/Cart/AjaxBuyAndBuy", { goodsIds: goodsids }, function (data) {
//注入模板
var evalText = doT.template($("#tmpBuyAndBuy").text());
//填充内容
$("#cntBuyAndBuy").html(evalText($.parseJSON(data)));
//隐藏Loading
$("#loadBuyAndBuy").hide();
});
}
}
</script>

我这里只简单介绍一下使用方法,这些基本够我日常应用了,如果有更高难度的需求,还请查阅官方文档,此类模板使用方法都大同小异,学会一个其他的也就都会了,区别只有各自的语法标记不同而已。

MVVM前后分离轻量级框架应用juicer和doT.js的更多相关文章

  1. 互联网轻量级框架SSM-查缺补漏第八天(MyBatis插件plugin使用及原理)

    简言:今天进行第八天的记录(只是写了八天).有的时候看的多,有的时候看的少,看的少的时候就攒几天一起写了.而今天这个插件我昨天写了一下午,下班没写完就回去了,今天把尾收了,再加上一个过程图方便下面原理 ...

  2. CQRS轻量级框架【CQRSlite】学习使用小记

    前言 这几天在研究DDD和CQRS.快把我绕晕了.发现国外的好文质量还是挺高的.之所以先体验CQRSlite这个小框架,是因为看了一位大神写的文章:https://www.codeproject.co ...

  3. WPF MVVM UI分离之《交互与数据分离》 基础才是重中之重~delegate里的Invoke和BeginInvoke 将不确定变为确定系列~目录(“机器最能证明一切”) 爱上MVC3系列~全局异常处理与异常日志 基础才是重中之重~lock和monitor的区别 将不确定变成确定~我想监视我的对象,如果是某个值,就叫另一些方法自动运行 将不确定变成确定~LINQ DBML模型可以对

    WPF MVVM UI分离之<交互与数据分离>   在我们使用WPF过程中,不可避免并且超级喜欢使用MVVM框架. 那么,使用MVVM的出发点是视觉与业务逻辑分离,即UI与数据分离 诸如下 ...

  4. FluentData,它是一个轻量级框架,关注性能和易用性。

    http://www.cnblogs.com/zengxiangzhan/p/3250105.html FluentData,它是一个轻量级框架,关注性能和易用性. 下载地址:FlunenData.M ...

  5. 【开源】【前后端分离】【优雅编码】分享我工作中的一款MVC+EF+IoC+Layui前后端分离的框架——【NO.1】框架概述

    写博客之前总想说点什么,但写的时候又忘了想说点什么,算了,不说了,还是来送福利吧. 今天是来分享我在平时工作中搭建的一套前后端分离的框架. 平时工作大多时候都是在做管理类型的软件开发,无非就是增.删. ...

  6. 初步了解学习flask轻量级框架,

    关于flask我有话说 flask作为一个轻量级框架,它里面有好多扩展包需要下载,比较麻烦,而且有的时候flask需要在虚拟环境下运行,但是他的优点还是有滴 ,只要是用过Django的人,都会觉得fl ...

  7. DDD实战进阶第一波(四):开发一般业务的大健康行业直销系统(搭建支持DDD的轻量级框架三)

    上一篇文章我们讲了经典DDD架构对比传统三层架构的优势,以及经典DDD架构每一层的职责后,本篇文章将介绍基础结构层中支持DDD的轻量级框架的主要代码. 这里需要说明的是,DDD轻量级框架能够体现DDD ...

  8. DDD实战进阶第一波(三):开发一般业务的大健康行业直销系统(搭建支持DDD的轻量级框架二)

    了解了DDD的好处与基本的核心组件后,我们先不急着进入支持DDD思想的轻量级框架开发,也不急于直销系统需求分析和具体代码实现,我们还少一块, 那就是经典DDD的架构,只有了解了经典DDD的架构,你才能 ...

  9. JEECG前后端分离UI框架实战版本抢先体验(ng2-admin+Angular4+AdminLTE+WebStorm)

    JEECG前后端分离UI框架实战版本 - 抢先体验 (ng2-admin+Angular4+AdminLTE) 关键词: ng2-admin.Angular4.AdminLTE.Nodejs.Jeec ...

随机推荐

  1. Grails笔记一:windows8.1操作系统cmd下grails命令无效

    最近决定使用intellij idea工具来开发基于Grails框架的应用程序,,在安装好jdk 1.7以及配置好jdk和grails环境变量后进行grails测试,在win8.1的命令行窗口中输入以 ...

  2. positio:absolute与position:relative的区别

    absolute 能让元素 inline-block 化:例如一个div标签默认宽度是100%显示的,但是一旦被absolute属性缠上,则100%默认宽度就会变成自适应内部元素的宽度. float ...

  3. TypeScript入门知识二(参数新特性)

    一,参数类型 1.在参数的名称后面使用冒号来指定参数的类型,当赋值的不是指定类型数值时会报错. var myname: string = "zhang san"; 2.当你没有指定 ...

  4. C语言中指针*p[N], (*P)[N],及**p的区别

    在C语言编程中指针经常困扰着我们,但是若能灵活运用指针的话,将会使得我们编程变得更加轻松与高效.这里讲下*p[N], (*P)[N],及**p的区别,这也是之前经常困扰我的地方. 这三者的定义分别为: ...

  5. PS各个工具的字母快捷键和英…

    原文地址:PS各个工具的字母快捷键和英文全名作者:Tycho     选框-Marquee(M)     移动-move(V)     套索-Lasso(L)     魔棒-Wand(W) 喷枪-in ...

  6. ★电车难题的n个坑爹变种

    哲学家都不会做的电车难题变异 此题会答清华北大 "电车难题(Trolley Problem)"是伦理学领域最为知名的思想实验之一,其内容大致是: 一个疯子把五个无辜的人绑在电车轨道 ...

  7. 软工+C(2017第2期) 分数和checklist

    // 上一篇:题目设计.点评和评分 // 下一篇:超链接 教学里,建立清晰明确的评分规则并且一开始就公布,对于教师.助教.学生都是重要的. 公布时机 在课程开始的时候,就需要确定并公布评分机制,随着课 ...

  8. 【Alpha】第三次Daily Scrum Meeting

    GIT 一.今日站立式会议照片 二.会议内容 1.确定开发人员负责开发模块 开发人员 开发模块 杨嘉成 注册登陆模块 吴文庆 服务模块 程志铭 个人中心 2.测试人员在开发人员完成该模块后紧跟测试 三 ...

  9. 201521123091 《Java程序设计》第7周学习总结

    Java 第七周总结 第七周的作业. 目录 1.本章学习总结 2.Java Q&A 3.码云上代码提交记录及PTA实验总结 1.本章学习总结 以你喜欢的方式(思维导图或其他)归纳总结集合相关内 ...

  10. 结对作业1----基于GUI的四则运算生成器

    组员:201421123015 陈麟凤 201421123019 张志杰 201421123020 黄海鸿 coding 地址:代码点这里 需求分析: 1.除了整数的四则运算还要支持分数的四则运算: ...