MVVM前后分离轻量级框架应用juicer和doT.js
//变量输出${变量}
${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的应用
{{= }} 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的更多相关文章
- 互联网轻量级框架SSM-查缺补漏第八天(MyBatis插件plugin使用及原理)
简言:今天进行第八天的记录(只是写了八天).有的时候看的多,有的时候看的少,看的少的时候就攒几天一起写了.而今天这个插件我昨天写了一下午,下班没写完就回去了,今天把尾收了,再加上一个过程图方便下面原理 ...
- CQRS轻量级框架【CQRSlite】学习使用小记
前言 这几天在研究DDD和CQRS.快把我绕晕了.发现国外的好文质量还是挺高的.之所以先体验CQRSlite这个小框架,是因为看了一位大神写的文章:https://www.codeproject.co ...
- WPF MVVM UI分离之《交互与数据分离》 基础才是重中之重~delegate里的Invoke和BeginInvoke 将不确定变为确定系列~目录(“机器最能证明一切”) 爱上MVC3系列~全局异常处理与异常日志 基础才是重中之重~lock和monitor的区别 将不确定变成确定~我想监视我的对象,如果是某个值,就叫另一些方法自动运行 将不确定变成确定~LINQ DBML模型可以对
WPF MVVM UI分离之<交互与数据分离> 在我们使用WPF过程中,不可避免并且超级喜欢使用MVVM框架. 那么,使用MVVM的出发点是视觉与业务逻辑分离,即UI与数据分离 诸如下 ...
- FluentData,它是一个轻量级框架,关注性能和易用性。
http://www.cnblogs.com/zengxiangzhan/p/3250105.html FluentData,它是一个轻量级框架,关注性能和易用性. 下载地址:FlunenData.M ...
- 【开源】【前后端分离】【优雅编码】分享我工作中的一款MVC+EF+IoC+Layui前后端分离的框架——【NO.1】框架概述
写博客之前总想说点什么,但写的时候又忘了想说点什么,算了,不说了,还是来送福利吧. 今天是来分享我在平时工作中搭建的一套前后端分离的框架. 平时工作大多时候都是在做管理类型的软件开发,无非就是增.删. ...
- 初步了解学习flask轻量级框架,
关于flask我有话说 flask作为一个轻量级框架,它里面有好多扩展包需要下载,比较麻烦,而且有的时候flask需要在虚拟环境下运行,但是他的优点还是有滴 ,只要是用过Django的人,都会觉得fl ...
- DDD实战进阶第一波(四):开发一般业务的大健康行业直销系统(搭建支持DDD的轻量级框架三)
上一篇文章我们讲了经典DDD架构对比传统三层架构的优势,以及经典DDD架构每一层的职责后,本篇文章将介绍基础结构层中支持DDD的轻量级框架的主要代码. 这里需要说明的是,DDD轻量级框架能够体现DDD ...
- DDD实战进阶第一波(三):开发一般业务的大健康行业直销系统(搭建支持DDD的轻量级框架二)
了解了DDD的好处与基本的核心组件后,我们先不急着进入支持DDD思想的轻量级框架开发,也不急于直销系统需求分析和具体代码实现,我们还少一块, 那就是经典DDD的架构,只有了解了经典DDD的架构,你才能 ...
- JEECG前后端分离UI框架实战版本抢先体验(ng2-admin+Angular4+AdminLTE+WebStorm)
JEECG前后端分离UI框架实战版本 - 抢先体验 (ng2-admin+Angular4+AdminLTE) 关键词: ng2-admin.Angular4.AdminLTE.Nodejs.Jeec ...
随机推荐
- MySQL(十一)之触发器
上一篇介绍的是比较简单的视图,其实用起来是相对比较简单的,以后有什么更多的关于视图的用法,到时候在自己补充.接下来让我们一起了解一下触发器的使用! 一.触发器概述 1.1.什么是触发器 触发器(Tri ...
- Java类加载原理解析
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt229 2 Java虚拟机类加载器结构简述 2.1 JVM三 ...
- [转]RMI方式Ehcache集群的源码分析
RMI方式Ehcache集群的源码分析 Ehcache不仅支持基本的内存缓存,还支持多种方式将本地内存中的缓存同步到其他使用Ehcache的服务器中,形成集群.如下图所示: Ehcache支持 ...
- hdu 3722 二分图 最优完备匹配 KM算法
这题只要想到是最优完备匹配就行了: 题意:给出n个字符串,若两两相连,将前一个反置添加到后一个后面,相连的值为两个字串从头开始相等的字符个数: 问如何匹配得出最大值: 思路:建图,套模板. 代码: # ...
- 使用JSR-303进行校验 @Valid
一.在SringMVC中使用 使用注解 1.准备校验时使用的JAR validation-api-1.0.0.GA.jar:JDK的接口: hibernate-validator-4.2.0.Fina ...
- Swing-布局管理器之BorderLayout(边界布局)-入门
注:本文内容基本源于Java图形化界面设计——布局管理器之BorderLayout(边界布局),笔者学习过程中根据自身理解进行少量编辑. 边界布局管理器(BorderLayout)把容器的的布局分为五 ...
- JAVA课程设计猜数游戏 个人
1.团队课程设计博客链接 https://i.cnblogs.com/EditPosts.aspx?postid=7067843&update=1 2.个人负责模块说明 输入用户ID 2.主要 ...
- 12.Linux之输入子系统分析(详解)
版权声明:本文为博主原创文章,转载请标注出处: 在此节之前,我们学的都是简单的字符驱动,涉及的内容有字符驱动的框架.自动创建设备节点.linux中断.poll机制.异步通知.同步互斥/非阻塞.定时 ...
- lintcode.177 把排序数组转换为高度最小的二叉搜索树
把排序数组转换为高度最小的二叉搜索树 描述 笔记 数据 评测 给一个排序数组(从小到大),将其转换为一棵高度最小的排序二叉树. 注意事项 There may exist multiple val ...
- java.io.IOException: Stream closed
今天在做SSH项目的时候,出现了这个错误.百思不得其解,网上的答案都不能解决我的问题-.. 后来,一气之下就重新写,写了之后发现在JSP遍历集合的时候出错了. <s:iterator value ...