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 ...
随机推荐
- Ibatis insert语句插入null引发的错误
公司使用的orm框架为ibatis,其中默认的insert语句一直都是这样写的: <insert id="insert" parameterClass="activ ...
- 利用Java调用OpenCV进行人脸识别
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt409 今天我准备学习如何用Java来进行人脸检测.人脸检测有助于在任何数字图 ...
- linux下使用gcc编译运行C程序
gcc(GNU Compiler Collection)是Linux下最常用的C语言编译器,是GNU项目中符合ANSI C标准的编译系统,能够编译用C.C++和Object C等语言编写的程序. 在 ...
- setAttribute设置无效
我发现ie浏览器中动态用setAttribute设置style属性值始终不能设置,经过一番查找发现了这篇文字 http://webcenter.hit.edu.cn/articles/2009/05- ...
- 自制IPsec_vpn综合实验
实验需求 R1.R2间tunnel建立私网: Vpn网关间配置ipsec实现数据加密: 使用tunnel模式下的ESP包头封装: 使用3des加密算法,md5摘要算法: 设置NAT旁路绕行流量: 利用 ...
- MySQL (二)-- 数据类型(列类型)、数值类型、 小数类型、 时间日期类型、 字符串类型 、 MySQL记录长度、列属性
1 数据类型(列类型) 所谓的数据类型:对数据进行统一的分类,从系统的角度出发是为了能够使用统一的方式进行管理,更好的利用有限的空间. SQL中将数据类型分成了三大类: 2 数值类型 数值类型数据:都 ...
- RobotFramework自动化测试框架-移动手机自动化测试Input Text和Click Button关键字的使用
Input Text和Click Button Input Text 关键字一般用来给输入框进行输入操作,该关键字接收两个参数[ locator | text ]. 示例1:启动安卓手机上一个APP的 ...
- MongoDB学习之路(五)
MongoDB $type 操作符 类型 数字 备注 Double 1 String 2 Object 3 Array 4 Binary data 5 Undefined 6 已废弃 Object i ...
- Java单元测试之覆盖率统计eclemma
安装 有两种安装方法 下载安装(推荐) 地址: http://sourceforge.net/projects/eclemma/ 将解压后的features和plugins目录下的文件分别拷贝到Ecl ...
- SNS团队第一次站立会议(2017.04.22)
一.当天站立式会议照片 本次会议主要内容:进一步明确了团队中各个成员的定位,说明了下一步团队工作的方向 二.每个人的工作 成员 昨天已完成的工作 今天计划完成的工作 罗于婕 系统架构设计及项目数据库设 ...