js模板引擎库mustache中类似if判断的处理 及handlebars.js

本文介绍了js模板引擎mustache如何通过# 和 ^ 符号实现类似if的逻辑判断,并讨论了利用函数对象进行渲染的方法。此外,还推荐了mustache的超集handlebars.js,提供更丰富的语法支持。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mustache是短小精悍速度超快的js模板引擎库,地址:http://github.com/janl/mustache.js

基本处理方式这里就不说了,原文档中有说明,这里说下它的欠缺的地方,比如if判断,它是没有的。它的优势就是纯粹的渲染,那些个分支判断逻辑对于mustache都应当是外部处理的(它内部是有if逻辑判断处理的,只是对于一个只想表达对对象进行渲染的js库来说,这些个语法糖应当是其它逻辑单元处理的,而不应由mustache担当,不知道我这么描述各位看客是否能理解)。

mustache的逻辑判断符中有2个很有意思的符号很重要:# ^ 。利用2个组合即可实现类似if的处理


当然,如果你嫌麻烦可以在后端或者前端对要渲染的数据进行处理,后端这里就不说了,说说前端,js本身是动态脚本,能很方便的对它写入属性对象,而mustache渲染

的其中一个特点就是函数对象的渲染:

View:

{
  "beatles": [
    { "firstName": "John", "lastName": "Lennon" },
    { "firstName": "Paul", "lastName": "McCartney" },
    { "firstName": "George", "lastName": "Harrison" },
    { "firstName": "Ringo", "lastName": "Starr" }
  ],
  "name": function () {
    return this.firstName + " " + this.lastName;
  }
}
Template:

{{#beatles}}
* {{name}}
{{/beatles}}
Output:

* John Lennon
* Paul McCartney
* George Harrison
* Ringo Starr
这个时候,我们可以对目标js对象进行函数属性的写入,比如:
$(result.data).each(function(idx, item) {
    item['transformstate'] = function() {
        return item['state'] == 1 ? "正常": (item['state'] == 2 ? "删除": "禁用");
    };
});

然后我们将模板中之前的state节点的渲染修改成{{transformstate}}即可。这里要注意下,默认函数属性对象如果返回值有html则自动转义的输出的,要是不想

转义,可以将transformstate渲染节点的写法改成{{{transformstate}}},没错,是3个大括号括起来,详细用法请看https://github.com/janl/mustache.js#variables

上面说了这么多,也无非是一种硬码处理方式,如果不想写那么多代码,可以使用另一个模板引擎handlebars.js,它是mustache的超集,向后兼任语法和使用,它的地址

https://github.com/wycats/handlebars.js  官网上的demo:http://handlebarsjs.com/



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值