[关闭]
@Wangww0925 2020-07-08T07:04:25.000000Z 字数 14956 阅读 644

JsRender 模板

模板引擎 jsRender/jsViews


使用模板,可以预先自定义一些固定格式的HTML标签,在需要显示数据时,再传入真实数据组装并展示在Web页中;避免了在JS中通过“+”等手动分割、连接字符串的复杂过程;针对高性能和纯字符串渲染进行了优化;无需依赖DOM和jQuery

官网: https://www.jsviews.com/#assigntag
jsrender.min.js 下载: https://www.jsviews.com/#download

JsRender使用场景

1、元素重复出现
2、动态加载数据

JsRender注意事项

JsRender对语法要求非常严格,比如for,if前面不能有空格


使用

1、定义模板: <script type="text/x-jsrender" id="Tem"></script>
2、引入js
3、数据:要json对象
4、编译成元素:document.getElementById("XXX").render(data); 或 $("#XXX").render(data); 或$.templates("#XXX").render(data)
5、添加到容器中:使用html、append、before、after等添加

例子:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Document</title>
  6. </head>
  7. <body>
  8. <div id="content"></div>
  9. <!-- 1、定义模板 -->
  10. <script type="text/x-jsrender" id="Tem">
  11. <p>{{:msg}}</p>
  12. </script>
  13. <!-- 2、引入js -->
  14. <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
  15. <script src="jsrender.min.js"></script>
  16. </body>
  17. </html>
  18. <script>
  19. // 3、数据
  20. var data = {
  21. msg:"今天天气真好"
  22. }
  23. // 4、编译成元素
  24. var html = $("#Tem").render(data)
  25. // 或
  26. // var html = $.templates("#Tem").render(data)
  27. // 5、添加到容器中
  28. $("#content").html(html)
  29. </script>

使用 效果:
使用


注释 {{!--}} ... {{--}}{{!-- ... --}}

例子:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Document</title>
  6. </head>
  7. <body>
  8. <div id="content"></div>
  9. <!-- 1、定义模板 -->
  10. <script type="text/x-jsrender" id="Tem">
  11. <p>{{:msg}}</p>
  12. {{!--}}
  13. <p>我是被注释掉的内容</p>
  14. {{--}}
  15. <p>啦啦啦 {{!-- 我是被注释掉的内容 --}} 啦啦</p>
  16. </script>
  17. <!-- 2、引入js -->
  18. <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
  19. <script src="jsrender.min.js"></script>
  20. </body>
  21. </html>
  22. <script>
  23. // 3、数据
  24. var data = {
  25. msg:"今天天气真好"
  26. }
  27. // 4、编译成元素并添加到容器中
  28. $("#content").html($("#Tem").render(data))
  29. </script>

注释 效果:
注释.png-1.3kB


赋值

使用:
文本赋值: {{:属性名}},类似 text()
原样输出: {{>属性名}},类似 html()

例子:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Document</title>
  6. </head>
  7. <body>
  8. <div id="content"></div>
  9. <!-- 1、定义模板 -->
  10. <script type="text/x-jsrender" id="Tem">
  11. <p>{{:msg}}</p>
  12. <p>{{:love}}</p>
  13. <p>{{>love}}</p> <!-- 原样输出 -->
  14. <p>{{:info.name}}</p>
  15. </script>
  16. <!-- 2、引入js -->
  17. <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
  18. <script src="jsrender.min.js"></script>
  19. </body>
  20. </html>
  21. <script>
  22. // 3、数据
  23. var data = {
  24. msg:"你好",
  25. love:'<span style="color:red">花草</span>',
  26. info:{
  27. name:"www",
  28. age:"18"
  29. }
  30. }
  31. // 4、编译成元素并添加到容器中
  32. $("#content").html($("#Tem").render(data))
  33. </script>

赋值 效果:
变量.png-3.4kB


判断 {{if 表达式}} … {{else}} … {{/if}}

例子:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Document</title>
  6. </head>
  7. <body>
  8. <div id="content"></div>
  9. <!-- 1、定义模板 -->
  10. <script type="text/x-jsrender" id="Tem">
  11. {{if info.name == "www"}}
  12. <p>年龄: {{:info.age}}</p>
  13. <hr>
  14. {{/if}}
  15. {{if type == "1"}}
  16. <p>消息: {{:msg}}</p>
  17. {{else type == "2"}}
  18. <p>名称: {{:info.name}}</p>
  19. {{else}}
  20. <p>年龄: {{:info.age}}</p>
  21. {{/if}}
  22. </script>
  23. <!-- 2、引入js -->
  24. <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
  25. <script src="jsrender.min.js"></script>
  26. </body>
  27. </html>
  28. <script>
  29. // 3、数据
  30. var data = {
  31. msg:"你好",
  32. type:'1',
  33. info:{
  34. name:"www",
  35. age:"18"
  36. }
  37. }
  38. // 4、编译成元素并添加到容器中
  39. $("#content").html($("#Tem").render(data))
  40. </script>

判断 效果:
判断.png-2.9kB


for 循环数组

{{:#data}} 展示数组元素内容

例子

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Document</title>
  6. </head>
  7. <body>
  8. <div id="content"></div>
  9. <!-- 1、定义模板 -->
  10. <script type="text/x-jsrender" id="Tem">
  11. {{for info}}
  12. <p>{{:#data}}</p>
  13. {{/for}}
  14. </script>
  15. <!-- 2、引入js -->
  16. <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
  17. <script src="jsrender.min.js"></script>
  18. </body>
  19. </html>
  20. <script>
  21. // 3、数据
  22. var data = {
  23. info: ['www', 'abc', '123']
  24. }
  25. // 4、编译成元素并添加到容器中
  26. $("#content").html($("#Tem").render(data))
  27. </script>

for 循环数组对象 [{},{}]

例子:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Document</title>
  6. </head>
  7. <body>
  8. <div id="content"></div>
  9. <!-- 1、定义模板 -->
  10. <script type="text/x-jsrender" id="Tem">
  11. <table width="500px" border="1" cellpadding="0" cellspacing="0" align="center">
  12. <tr>
  13. <th>姓名</th>
  14. <th>年龄</th>
  15. </tr>
  16. {{for data.info}}
  17. <tr align="center">
  18. <td>{{:name}}</td>
  19. <td>{{:age}}</td>
  20. </tr>
  21. {{/for}}
  22. </table>
  23. </script>
  24. <!-- 2、引入js -->
  25. <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
  26. <script src="jsrender.min.js"></script>
  27. </body>
  28. </html>
  29. <script>
  30. // 3、数据
  31. var data = {
  32. msg:"你好",
  33. type:'1',
  34. data:{
  35. id: "01",
  36. info: [
  37. {
  38. name: "www",
  39. age: 18
  40. },
  41. {
  42. name: "aaa",
  43. age: 20
  44. },
  45. {
  46. name: "bbb",
  47. age: 30
  48. },
  49. {
  50. name: "ccc",
  51. age: 40
  52. },
  53. {
  54. name: "ddd",
  55. age: 50
  56. },
  57. {
  58. name: "eee",
  59. age: 60
  60. },
  61. {
  62. name: "fff",
  63. age: 70
  64. },
  65. ]
  66. }
  67. }
  68. // 4、编译成元素并添加到容器中
  69. $("#content").html($("#Tem").render(data))
  70. </script>

循环 效果:
循环.png-5.8kB


props 循环对象

{{>key}} 获取元素名

{{>prop}} 获取元素值

例子:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Document</title>
  6. </head>
  7. <body>
  8. <div id="content"></div>
  9. <!-- 1、定义模板 -->
  10. <script type="text/x-jsrender" id="Tem">
  11. <table width="500px" border="1" cellpadding="0" cellspacing="0" align="center">
  12. <tr>
  13. <th>姓名</th>
  14. <th>年龄</th>
  15. </tr>
  16. {{props info}}
  17. <tr align="center">
  18. <td>{{:prop.name}}</td>
  19. <td>{{:prop.age}}</td>
  20. </tr>
  21. {{/props}}
  22. </table>
  23. </script>
  24. <!-- 2、引入js -->
  25. <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
  26. <script src="jsrender.min.js"></script>
  27. </body>
  28. </html>
  29. <script>
  30. // 3、数据
  31. var data = {
  32. info: {
  33. "a" : {
  34. name: "www",
  35. age: 18
  36. },
  37. "b" : {
  38. name: "aaa",
  39. age: 20
  40. },
  41. "c" : {
  42. name: "bbb",
  43. age: 30
  44. }
  45. }
  46. }
  47. // 4、编译成元素并添加到容器中
  48. $("#content").html($("#Tem").render(data))
  49. </script>

例子:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Document</title>
  6. </head>
  7. <body>
  8. <div id="content"></div>
  9. <!-- 1、定义模板 -->
  10. <script type="text/x-jsrender" id="Tem">
  11. <table width="500px" border="1" cellpadding="0" cellspacing="0" align="center">
  12. <tr>
  13. <th>姓名</th>
  14. <th>年龄</th>
  15. </tr>
  16. {{props info}}
  17. <tr align="center">
  18. <td>{{>prop}}</td>
  19. <td>{{>prop}}</td>
  20. </tr>
  21. {{/props}}
  22. </table>
  23. </script>
  24. <!-- 2、引入js -->
  25. <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
  26. <script src="jsrender.min.js"></script>
  27. </body>
  28. </html>
  29. <script>
  30. // 3、数据
  31. var data = {
  32. info: {
  33. name: "www",
  34. name: "aaa",
  35. name: "bbb"
  36. }
  37. }
  38. // 4、编译成元素并添加到容器中
  39. $("#content").html($("#Tem").render(data))
  40. </script>

循环数组对象时添加参数 {{for 数据 ~命名=属性名}}

使用:

  1. 1、添加参数,参数必须以~开头,多个参数用空格分隔
  2. 2、通过参数(~命名),我们缓存了父级下的属性,在子循环中通过 {{:~命名}} 访问参数,就可以间接访问父级数据

例子:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Document</title>
  6. </head>
  7. <body>
  8. <div id="content"></div>
  9. <!-- 1、定义模板 -->
  10. <script type="text/x-jsrender" id="Tem">
  11. <table width="500px" border="1" cellpadding="0" cellspacing="0" align="center" style="margin-top: 50px;">
  12. <tr>
  13. <th>~infoId</th>
  14. <th>~type</th>
  15. <th>#data.属性名</th>
  16. <th>姓名</th>
  17. <th>年龄</th>
  18. </tr>
  19. {{for arr.info ~type=type ~infoId=arr.id}}
  20. <tr align="center">
  21. <td>{{:~infoId}}</td>
  22. <td>{{:~type}}</td>
  23. <td>{{:#data.name}}</td> {{!-- #data相当于this(arr) --}}
  24. <td>{{:name}}</td>
  25. <td>{{:age}}</td>
  26. </tr>
  27. {{/for}}
  28. </table>
  29. </script>
  30. <!-- 2、引入js -->
  31. <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
  32. <script src="jsrender.min.js"></script>
  33. </body>
  34. </html>
  35. <script>
  36. // 3、数据
  37. var data = {
  38. msg:"你好",
  39. type:'1',
  40. arr:{
  41. id: "01",
  42. info: [
  43. {
  44. name: "www",
  45. age: 18
  46. },
  47. {
  48. name: "aaa",
  49. age: 20
  50. },
  51. {
  52. name: "bbb",
  53. age: 30
  54. }
  55. ]
  56. }
  57. }
  58. // 4、编译成元素并添加到容器中
  59. $("#content").html($("#Tem").render(data))
  60. </script>

循环时添加参数 效果:
循环-定参.png-5.7kB


循环中获取父级元素的内容 #parent.parent.data.属性名

注意

1、data不能省略
2、说是获取父级元素,但是好像也是从顶层找起,与~root效果一样
3、测不出获取父级元素的效果,也没有找到相关文档

例子:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Document</title>
  6. </head>
  7. <body>
  8. <div id="content"></div>
  9. <!-- 1、定义模板 -->
  10. <script type="text/x-jsrender" id="Tem">
  11. <table width="500px" border="1" cellpadding="0" cellspacing="0" align="center" style="margin-top: 50px;">
  12. <tr>
  13. <th>type</th>
  14. <th>id</th>
  15. <th>arr1.id</th>
  16. <th>姓名</th>
  17. <th>年龄</th>
  18. </tr>
  19. {{for arr.info}}
  20. <tr align="center">
  21. <td>{{:#parent.parent.data.type}}</td>
  22. <td>{{:#parent.parent.data.id}}</td>
  23. <td>{{:#parent.parent.data.arr.id}}</td>
  24. <td>{{:name}}</td>
  25. <td>{{:age}}</td>
  26. </tr>
  27. {{/for}}
  28. <tfoot>
  29. <tr>
  30. <td colspan="5" align="center">注意: 多级下,使用#parent.parent.data.id获取不到info父级(arr)下的id,父级好像是data,而不是arr,所以需要使用arr.id</td>
  31. </tr>
  32. </tfoot>
  33. </table>
  34. </script>
  35. <!-- 2、引入js -->
  36. <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
  37. <script src="jsrender.min.js"></script>
  38. </body>
  39. </html>
  40. <script>
  41. // 3、数据
  42. var data = {
  43. msg:"你好",
  44. type:'1',
  45. arr:{
  46. id: "01",
  47. info: [
  48. {
  49. name: "www",
  50. age: 18
  51. },
  52. {
  53. name: "aaa",
  54. age: 20
  55. },
  56. {
  57. name: "bbb",
  58. age: 30
  59. }
  60. ]
  61. }
  62. }
  63. // 4、编译成元素并添加到容器中
  64. $("#content").html($("#Tem").render(data))
  65. </script>

父级 #parent.parent.data.属性名 效果:
循环-父级.png-11.2kB


循环中获取根元素的内容 ~root.属性名

例子:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Document</title>
  6. </head>
  7. <body>
  8. <div id="content"></div>
  9. <!-- 1、定义模板 -->
  10. <script type="text/x-jsrender" id="Tem">
  11. <table width="500px" border="1" cellpadding="0" cellspacing="0" align="center" style="margin-top: 50px;">
  12. <tr>
  13. <th>type</th>
  14. <th>~root.type</th>
  15. <th>姓名</th>
  16. <th>年龄</th>
  17. </tr>
  18. {{for arr.info}}
  19. <tr align="center">
  20. <td>{{:type}}</td>
  21. <td>{{:~root.type}}</td>
  22. <td>{{:name}}</td>
  23. <td>{{:age}}</td>
  24. </tr>
  25. {{/for}}
  26. </table>
  27. </script>
  28. <!-- 2、引入js -->
  29. <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
  30. <script src="jsrender.min.js"></script>
  31. </body>
  32. </html>
  33. <script>
  34. // 3、数据
  35. var data = {
  36. type:'1',
  37. arr:{
  38. info: [
  39. {
  40. name: "www",
  41. age: 18
  42. },
  43. {
  44. name: "aaa",
  45. age: 20
  46. },
  47. {
  48. name: "bbb",
  49. age: 30
  50. }
  51. ]
  52. }
  53. }
  54. // 4、编译成元素并添加到容器中
  55. $("#content").html($("#Tem").render(data))
  56. </script>

顶级 ~root.属性名 效果:
循环-顶级.png-4.5kB


循环中获取索引 #getIndex()#index

注意: 索引从0开始

例子:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Document</title>
  6. </head>
  7. <body>
  8. <div id="content"></div>
  9. <!-- 1、定义模板 -->
  10. <script type="text/x-jsrender" id="Tem">
  11. <table width="500px" border="1" cellpadding="0" cellspacing="0" align="center" style="margin-top: 50px;">
  12. <tr>
  13. <th>#getIndex()</th>
  14. <th>#index</th>
  15. <th>姓名</th>
  16. <th>年龄</th>
  17. </tr>
  18. {{for arr.info}}
  19. <tr align="center">
  20. <td>{{:#getIndex()}}</td>
  21. <td>{{:#index}}</td>
  22. <td>{{:name}}</td>
  23. <td>{{:age}}</td>
  24. </tr>
  25. {{/for}}
  26. </table>
  27. </script>
  28. <!-- 2、引入js -->
  29. <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
  30. <script src="jsrender.min.js"></script>
  31. </body>
  32. </html>
  33. <script>
  34. // 3、数据
  35. var data = {
  36. type:'1',
  37. arr:{
  38. info: [
  39. {
  40. name: "www",
  41. age: 18
  42. },
  43. {
  44. name: "aaa",
  45. age: 20
  46. },
  47. {
  48. name: "bbb",
  49. age: 30
  50. }
  51. ]
  52. }
  53. }
  54. // 4、编译成元素并添加到容器中
  55. $("#content").html($("#Tem").render(data))
  56. </script>

循环获取索引 效果:
循环-索引.png-4kB


获取数组长度 Array.length

例子:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Document</title>
  6. </head>
  7. <body>
  8. <div id="content"></div>
  9. <!-- 1、定义模板 -->
  10. <script type="text/x-jsrender" id="Tem">
  11. <table width="500px" border="1" cellpadding="0" cellspacing="0" align="center" style="margin-top: 50px;">
  12. <tr>
  13. <th>姓名</th>
  14. <th>年龄</th>
  15. </tr>
  16. {{for arr.info}}
  17. <tr align="center">
  18. <td>{{:name}}</td>
  19. <td>{{:age}}</td>
  20. </tr>
  21. {{/for}}
  22. <tfoot>
  23. <tr align="center">
  24. <td colspan="2">长度: {{:arr.info.length}}</td>
  25. </tr>
  26. </tfoot>
  27. </table>
  28. </script>
  29. <!-- 2、引入js -->
  30. <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
  31. <script src="jsrender.min.js"></script>
  32. </body>
  33. </html>
  34. <script>
  35. // 3、数据
  36. var data = {
  37. type:'1',
  38. arr:{
  39. info: [
  40. {
  41. name: "www",
  42. age: 18
  43. },
  44. {
  45. name: "aaa",
  46. age: 20
  47. },
  48. {
  49. name: "bbb",
  50. age: 30
  51. }
  52. ]
  53. }
  54. }
  55. // 4、编译成元素并添加到容器中
  56. $("#content").html($("#Tem").render(data))
  57. </script>

数组长度 效果:
数组长度.png-3.9kB


获取数组中指定的某个元素 Array[下标]Array[下标].元素名

例子:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Document</title>
  6. </head>
  7. <body>
  8. <div id="content"></div>
  9. <!-- 1、定义模板 -->
  10. <script type="text/x-jsrender" id="Tem">
  11. <p>数组下标为2的名称 {{:arr[2].name}}</p>
  12. </script>
  13. <!-- 2、引入js -->
  14. <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
  15. <script src="jsrender.min.js"></script>
  16. </body>
  17. </html>
  18. <script>
  19. // 3、数据
  20. var data = {
  21. arr:[
  22. {
  23. name: "www",
  24. age: 18
  25. },
  26. {
  27. name: "aaa",
  28. age: 20
  29. },
  30. {
  31. name: "bbb",
  32. age: 30
  33. }
  34. ]
  35. }
  36. // 4、编译成元素并添加到容器中
  37. $("#content").html($("#Tem").render(data))
  38. </script>

数组中指定的某个元素 Array.[下标] 效果:
数组某个元素.png-1.8kB


模板嵌套模板 {{include 数据 tmpl="#另一个模板" /}}

例子:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Document</title>
  6. </head>
  7. <body>
  8. <div id="content"></div>
  9. <!-- 1、定义模板 -->
  10. <script type="text/x-jsrender" id="Tem">
  11. <p>{{:msg}}</p>
  12. {{include info tmpl="#Tem1" /}}
  13. </script>
  14. <script type="text/x-jsrender" id="Tem1">
  15. <table width="500px" border="1" cellpadding="0" cellspacing="0" style="margin-top: 20px;">
  16. <tr>
  17. <th>姓名</th>
  18. <th>年龄</th>
  19. </tr>
  20. {{for child}}
  21. <tr align="center">
  22. <td>{{:name}}</td>
  23. <td>{{:age}}</td>
  24. </tr>
  25. {{/for}}
  26. </table>
  27. </script>
  28. <!-- 2、引入js -->
  29. <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
  30. <script src="jsrender.min.js"></script>
  31. </body>
  32. </html>
  33. <script>
  34. // 3、数据
  35. var data = {
  36. msg: "名单列表:",
  37. info: {
  38. child: [
  39. {
  40. name: "www",
  41. age: 18
  42. },
  43. {
  44. name: "aaa",
  45. age: 20
  46. },
  47. {
  48. name: "bbb",
  49. age: 30
  50. }
  51. ]
  52. }
  53. }
  54. // 4、编译成元素并添加到容器中
  55. $("#content").html($("#Tem").render(data))
  56. </script>

模板嵌套模板 {{include evt tmpl="#另一个模板" /}} 效果:
模板嵌套模板.png-4.5kB


转换器 $.views.converters()定义

使用:

  1. // 转换器
  2. $.views.converters({
  3. func:function (type){},
  4. func1:function (val){}
  5. })
  6. // 引用
  7. {{func:属性名}}

例子:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Document</title>
  6. </head>
  7. <body>
  8. <div id="content"></div>
  9. <!-- 1、定义模板 -->
  10. <script type="text/x-jsrender" id="Tem">
  11. <p>{{:msg}}</p>
  12. <table width="500px" border="1" cellpadding="0" cellspacing="0" style="margin-top: 20px;">
  13. <tr>
  14. <th>姓名</th>
  15. <th>年龄</th>
  16. <th>爱好</th>
  17. <th>属于</th>
  18. </tr>
  19. {{for info.child}}
  20. <tr align="center">
  21. <td>{{:name}}</td>
  22. <td>{{:age}}</td>
  23. <td>{{:like}}</td>
  24. <td>{{typeFun:type}}</td>
  25. </tr>
  26. {{/for}}
  27. </table>
  28. </script>
  29. <!-- 2、引入js -->
  30. <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
  31. <script src="jsrender.min.js"></script>
  32. </body>
  33. </html>
  34. <script>
  35. // 3、数据
  36. var data = {
  37. msg: "名单列表:",
  38. info: {
  39. child: [
  40. {
  41. name: "www",
  42. age: 18,
  43. like:"玫瑰",
  44. type:"01"
  45. },
  46. {
  47. name: "aaa",
  48. age: 20,
  49. like:"松树",
  50. type:"03"
  51. },
  52. {
  53. name: "bbb",
  54. age: 30,
  55. like:"四叶草",
  56. type:"02"
  57. }
  58. ]
  59. }
  60. }
  61. // 定义 转换器
  62. var str = {
  63. "01": "花",
  64. "02": "草",
  65. "03": "树",
  66. "04": "木",
  67. }
  68. $.views.converters({
  69. typeFun: function (type){
  70. return str[type]
  71. }
  72. })
  73. // 4、编译成元素并添加到容器中
  74. $("#content").html($("#Tem").render(data))
  75. </script>

转换器 效果:
转换器.png-6.5kB


帮助方法 $.views.helpers()定义

使用:

  1. // 方法
  2. $.views.helpers({
  3. Fun:function (type,val){},
  4. Fun1:function (val){}
  5. })
  6. // 引用
  7. {{:~Fun(属性名1, 属性名2, ...)}}

例子: isTrue 如果为true 显示类型

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Document</title>
  6. </head>
  7. <body>
  8. <div id="content"></div>
  9. <!-- 1、定义模板 -->
  10. <script type="text/x-jsrender" id="Tem">
  11. <p>{{:msg}}</p>
  12. <table width="500px" border="1" cellpadding="0" cellspacing="0" style="margin-top: 20px;">
  13. <tr>
  14. <th>姓名</th>
  15. <th>年龄</th>
  16. <th>爱好</th>
  17. <th>真爱</th>
  18. </tr>
  19. {{for info.child}}
  20. <tr align="center">
  21. <td>{{:name}}</td>
  22. <td>{{:age}}</td>
  23. <td>{{:like}}</td>
  24. <td>{{:~typeFun(type,isTrue)}}</td>
  25. </tr>
  26. {{/for}}
  27. </table>
  28. </script>
  29. <!-- 2、引入js -->
  30. <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
  31. <script src="jsrender.min.js"></script>
  32. </body>
  33. </html>
  34. <script>
  35. // 3、数据
  36. var data = {
  37. msg: "名单列表:",
  38. info: {
  39. child: [
  40. {
  41. name: "www",
  42. age: 18,
  43. like:"玫瑰",
  44. type:"01",
  45. isTrue:true
  46. },
  47. {
  48. name: "aaa",
  49. age: 20,
  50. like:"松树",
  51. type:"03",
  52. isTrue:false
  53. },
  54. {
  55. name: "bbb",
  56. age: 30,
  57. like:"四叶草",
  58. type:"02",
  59. isTrue:true
  60. }
  61. ]
  62. }
  63. }
  64. // 定义 转换器
  65. var str = {
  66. "01": "花",
  67. "02": "草",
  68. "03": "树",
  69. "04": "木",
  70. }
  71. $.views.helpers({
  72. typeFun: function (type,isTrue){
  73. return isTrue ? str[type] : ""
  74. }
  75. })
  76. // 4、编译成元素并添加到容器中
  77. $("#content").html($("#Tem").render(data))
  78. </script>

方法 效果:
方法.png-6.2kB


自定义标签 $.views.tags()

使用:

  1. // 方法
  2. $.views.tags({
  3. Fun:function (type,val){},
  4. Fun1:function (val){}
  5. })
  6. // 引用
  7. {{Fun 属性名1 属性名2 /}}

例子:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Document</title>
  6. </head>
  7. <body>
  8. <div id="content"></div>
  9. <!-- 1、定义模板 -->
  10. <script type="text/x-jsrender" id="Tem">
  11. <p>{{Fun val /}}</p>
  12. <p>{{Fun1 name val /}}</p>
  13. </script>
  14. <!-- 2、引入js -->
  15. <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
  16. <script src="jsrender.min.js"></script>
  17. </body>
  18. </html>
  19. <script>
  20. // 3、数据
  21. var data = {
  22. name: "www",
  23. val:"花"
  24. }
  25. // 自定义标签
  26. $.views.tags({
  27. Fun: function (val){
  28. return '可以出去看<span style="color:red;">' + val + '</span>'
  29. },
  30. Fun1:function (name,like){
  31. return name + '喜欢' + like
  32. }
  33. })
  34. // 4、编译成元素并添加到容器中
  35. $("#content").html($("#Tem").render(data))
  36. </script>

自定义标签 $.views.tags() 效果:
自定义标签.png-1.9kB


作者 wendy
2018 年 12月 21日


参考文献

更多参考官网
JsRender 前端渲染模板基础学习

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注