Handlebars辅助函数集

Handlebars 辅助函数集的 JavaScript 实现文件在这里

有自定义需求的可以在nei平台上在规范中将文件选择为自定义handlebars辅助函数即可。

如何撰写自定义Handlebars辅助函数

Handlerbars通过registerHelper函数向handlerbars注入辅助函数,其代码形式如下所示

  1. Handlebars.registerHelper('JSONStringify', function (obj) {
  2. return JSON.stringify(obj, null, '\t');
  3. });

可以看到,该辅助函数JSONStringify接收一个参数obj,将该obj序列化为字符串,返回。用户可以通过
将规范中的js文件标记为自定义handlebars辅助函数,从而增强模板的能力。更多的示例可参考nei-toolkit
定义的辅助函数实现文件以及Handlebars官方文档

目前可用的 helper

raw

用它包裹的内容按原样输出

  1. {{{{raw}}}}
  2. {{name}}
  3. {{{{/raw}}}}
  4. 输出为: {{name}}

ifCond

支持的逻辑运算有: ‘==’、’===’、’<’、’<=’、’>’、’>=’、’&&’、’||’

模板中的写法:

  1. {{#ifCond var1 '==' var2}}

extname

以点号分隔字符串后的最后一项, 相当于根据路径取文件的扩展名

  1. var data = {
  2. path: 'a.b.c'
  3. }
  4. var template = `{{extname path}}`;
  5. console.log(Handlebars.compile(template)(data)); // 输出: 'c'

hyphenToCamel

中划线’-‘后的字符转大写

  1. var data = {
  2. "name": "a-b-c"
  3. }
  4. var template = `{{hyphenToCamel name}}`;
  5. console.log(Handlebars.compile(template)(data)); //输出ABC

camelToHyphen

hyphenToCamel的反函数,将大写字符转为小写并以中划线’-‘分开

  1. var data = {
  2. "name": "AbcDefGhi"
  3. }
  4. var template = `{{camelToHyphen name}}`;
  5. console.log(Handlebars.compile(template)(data)); //输出abc-def-ghi

hyphenToUnderline

中划线’-‘转下划线’_’

  1. var data = {
  2. "name": "a-b-c"
  3. }
  4. var template = `{{hyphenToUnderline name}}`;
  5. console.log(Handlebars.compile(template)(data)); //输出a_b_c

iosProperty

帮助ios工程自动生成property声明, 需要在规范中将文件选为数据模型列表填充, 该函数读取该文件的所有property,依据属性的类型生成声明.

  1. var data = {
  2. "datatype": {
  3. "fields":[{
  4. "name": "foo",
  5. "type": "String",
  6. "arrDim": 0,
  7. "format": 3,
  8. "itemIsArray": 0,
  9. "defaultValue": "fooDesc",
  10. "genExp": "",
  11. "description": ""
  12. },
  13. {
  14. "name": "bar",
  15. "type": "customType",
  16. "arrDim": 0,
  17. "format": 1,
  18. "itemIsArray": 0,
  19. "defaultValue": "",
  20. "genExp": "",
  21. "description": "customDesc"
  22. }]
  23. }
  24. }
  25. {{iosProperty}} --> 输出: /**
  26. * fooDesc
  27. */
  28. @property (nonatomic, copy) String *foo;
  29. /**
  30. * customDesc
  31. */
  32. @property (nonatomic, strong) customType *bar;

lowerFirst

将首字母小写

  1. var data = {
  2. "name": "ProjectGroup"
  3. }
  4. var template = `{{lowerFirst name}}`;
  5. console.log(Handlebars.compile(template)(data)); // 输出: projectGroup

noLineBreak

将换行替换为逗号(默认)或者自定义分隔符

  1. var data = {
  2. comment: 'a\nb\nc'
  3. }
  4. var template = `{{noLineBreak comment}}`;
  5. console.log(Handlebars.compile(template)(data)); // 输出: 'a,b,c'
  6. var template = `{{noLineBreak comment sep="*"}}`;
  7. console.log(Handlebars.compile(template)(data)); // 输出: 'a*b*c'

prettifyComment

格式化注释, 在每一行的前面添加 *

  1. var data = {
  2. comment: 'a\nb\nc'
  3. }
  4. var template = `{{prettifyComment this}}`;
  5. console.log(Handlebars.compile(template)(data)); // 输出: ' * a\n * b\n * c'

typeName

获取类型名称, 如果它是数组, 则使用 [] 嵌套, 比如二维数组: String[][]

也可以使用 List 嵌套, 比如二维数组: List>

  1. var data = {
  2. type: 'String',
  3. arrDim: 2
  4. }
  5. var template = `{{typeName this}}`;
  6. console.log(Handlebars.compile(template)(data)); // 输出: String[][]
  7. template = `{{typeName this useList=true}}`;
  8. console.log(Handlebars.compile(template)(data)); // 输出: List<List<String>>
  9. // 也可以使用下面这种方式传入参数:
  10. var template = `{{typeName type=this.type arrDim=this.arrDim}}`;
  11. console.log(Handlebars.compile(template)(data)); // 输出: String[][]
  12. var template = `{{typeName type=this.type arrDim=this.arrDim useList=true}}`;
  13. console.log(Handlebars.compile(template)(data)); // 输出: List<List<String>>

upperFirst

将首字母大写

  1. var data = {
  2. "name": "id"
  3. }
  4. var template = `{{upperFirst name}}`;
  5. console.log(Handlebars.compile(template)(data)); // 输出: Id