template 模板封装了第三方模板引擎 Mustache.js,可以访问Mustache.js 文档了解更多信息。本组件暂时只支持辅助其他 MIP 组件完成模板渲染工作,直接使用不会渲染。个性化 MIP 组件需要按照MIP组件开发规范封装。

标题 内容
所需脚本 https://c.mipcdn.com/static/v1/mip-mustache/mip-mustache.js

示例

  1. <!-- 模板引擎类型的组件统一使用 `<template>` 标签 -->
  2. <template type="mip-mustache">
  3. Hello {{world}}!
  4. </template>
  5. /**
  6. * 组件脚本代码
  7. *
  8. * element {HTML node} HTML DOM 节点
  9. * data {Object} 是传递给模板用来渲染的数据
  10. * html {string} 编译后的 html 字符串
  11. */
  12. var templates = require('templates');
  13. templates.render(element, data).then(function (html) {
  14. element.innerHTML = html;
  15. });

属性

type

说明:模板引擎类型
必选项:是
类型:字符串

Mustache 语法

基本使用

  1. - data
  2. {
  3. name: 'Chris',
  4. age: '15',
  5. sex: '<b>female</b>'
  6. }
  7. - Template
  8. <template type="mip-mustache" id="mip-template-id">
  9. <li>name: {{name}}</li>
  10. <li>age: {{age}}</li>
  11. <li>sex: {{sex}}</li>
  12. <li>sex: {{{sex}}}</li>
  13. <li>sex: {{&sex}}</li>
  14. {{=<% %>=}}
  15. <li>sex: {{sex}}</li>
  16. <%={{ }}=%>
  17. </template>
  18. - 编译后的 html
  19. <li>name: Chris</li>
  20. <li>age: 15</li>
  21. <li>sex: &lt;b&gt;female&lt;&#x2F;b&gt;</li>
  22. <li>sex: <b>female</b></li>
  23. <li>sex: </li>
  24. <li>sex: {{sex}}</li>

复杂data的使用

  1. - data
  2. {
  3. name: {
  4. first: 'Michael',
  5. last: 'Jackson'
  6. },
  7. age: '15'
  8. }
  9. - Template
  10. <template type="mip-mustache" id="mip-template-id">
  11. <li>name: {{name.first}} {{name.last}}</li>
  12. <li>age: {{age}}</li>
  13. </template>
  14. - 编译后的 html
  15. <li>name: Michael Jackson</li>
  16. <li>age: 15</li>

对象数组

  1. - data
  2. {
  3. "stooges": [
  4. { "name": "Moe" },
  5. { "name": "Larry" },
  6. { "name": "Curly" }
  7. ]
  8. }
  9. - Template
  10. <template type="mip-mustache" id="mip-template-id">
  11. {{#stooges}}
  12. <li>{{name}}</li>
  13. {{/stooges}}
  14. </template>
  15. - 编译后的 html
  16. <li>Moe</li>
  17. <li>Larry</li>
  18. <li>Curly</li>

一维数组

  1. - data
  2. {
  3. musketeers: ["Athos", "Aramis", "Porthos", "D'Artagnan"]
  4. }
  5. - Template
  6. <template type="mip-mustache" id="mip-template-id">
  7. {{#musketeers}}
  8. <li>{{.}}</li>
  9. {{/musketeers}}
  10. </template>
  11. - 编译后的 html
  12. <li>Athos</li>
  13. <li>Aramis</li>
  14. <li>Porthos</li>
  15. <li>D'Artagnan</li>

循环函数

  1. - data
  2. {
  3. "beatles": [
  4. { "firstName": "John", "lastName": "Lennon" },
  5. { "firstName": "Paul", "lastName": "McCartney" },
  6. { "firstName": "George", "lastName": "Harrison" },
  7. { "firstName": "Ringo", "lastName": "Starr" }
  8. ],
  9. "name": function () {
  10. return this.firstName + " " + this.lastName;
  11. }
  12. }
  13. - Template
  14. <template type="mip-mustache" id="mip-template-id">
  15. {{#beatles}}
  16. <li>{{name}}</li>
  17. {{/beatles}}
  18. </template>
  19. - 编译后的 html
  20. <li>John Lennon</li>
  21. <li>Paul McCartney</li>
  22. <li>George Harrison</li>
  23. <li>Ringo Starr</li>

函数

  1. - data
  2. {
  3. "name": "Tater",
  4. "bold": function () {
  5. return function (text, render) {
  6. return "<b>" + render(text) + "</b>";
  7. }
  8. }
  9. }
  10. - Template
  11. <template type="mip-mustache" id="mip-template-id">
  12. {{#bold}}Hi {{name}}.{{/bold}}
  13. </template>
  14. - 编译后的 html
  15. <b>Hi Tater.</b>

空数组的处理

  1. - data
  2. {
  3. "repos": []
  4. }
  5. - Template
  6. <template type="mip-mustache" id="mip-template-id">
  7. {{#repos}}<li>{{name}}</li>{{/repos}}
  8. {{^repos}}No repos !!{{/repos}}
  9. </template>
  10. - 编译后的 html
  11. No repos !!

可以访问Mustache.js 文档了解更多信息。