art-templated的使用

art-template是什么

art-template 是一个简约、超快的模板引擎。它采用作用域预声明的技术来优化模板渲染速度,从而获得接近 JavaScript 极限的运行性能,并且同时支持 NodeJS 和浏览器。

art-template 数据渲染方式

1.引入art-template.js文件

<script src="template-debug.js"></script>

2.编写html模板

使用script标签包含art-template模板,注意type不能是’js’,使用双大括号{{}}包含引用数据

<script id="test" type="text/html">
  <h1>{{title}}</h1>
</script>

3.向模板插入数据

var data = {
  title: "hello world"
};
var html = template("test",data);

4.将模板插入dom结构

document.getElementById('content').innerHTML = html;

art-template 数据循环

art-template使用each循环数据

var data1 = {
  0: li,
  1: zhang,
  2: zhao
};

var data2 = [
  pink,
  red,
  yellow
],

var data3 = [
  [one, two, three],
  [east, north, west]
]

var data4 = [
  [ki: 3, ji: 4],
  [ki: 5, ji: 6]
]

var data5 = [
  a: [1, 2, 3, 4],
  b: [5, 6, 7, 8]
]

var testData = {}
testData.data1 = data1
testData.data2 = data2
testData.data3 = data3
testData.data4 = data4
testData.data5 = data5

var html = template("test",testData);
document.getElementById('content').innerHTML = html;
<script id="test" type="text/html">
  <!-- 循环data1,可直接循环对象 -->
  <p>
    {{each data1}}
    <span>{{$value}}</span>
    {{/each}
  </p>

  <!-- 循环data2数组 -->
  <p>
    {{each data2}}
    <span>{{$value}}</span>
    {{/each}}
  </p>

  <!-- 循环data3,嵌套循环对象$value中再循环$value -->
  <div>
    {{each data3}}
    <p>
      {{each $value}}
      <span>{{$value}}</span>
      {{/each}}
    </p>
    {{/each}}
  <div>
    <!-- 循环data3,嵌套循环对象$value中再循环$value -->
  <div>
    {{each data4}}
    <p>
      {{each $value}}
      <span>{{$value.ki}}</span>
      <span>{{$value.ji}}</span>
      {{/each}}
    </p>
   {{/each}}
  <div>
    <!-- 循环data3,嵌套循环对象$value中再循环$value -->
  <div>
    {{each data4}}
    <p>
      {{each $value.a}}
      <span>{{$value}}</span>
      {{/each}}
    </p> 
    <p>
      {{each $value.b}}
      <span>{{$value}}</span>
      {{/each}}
    </p>
    {{/each}}
  <div>
</script>

当dom结构中只有部分需要使用循环数据(比如表格表头不需要使用循环来渲染)时,可直接把需要渲染的部分循环出来就行了

<script id="week-pub-temp" type="text/html">
  <table class="table table-bordered">
    <thead>
      <tr>
        <th colspan="6">{{skTotal}}</th>
      </tr>
      <tr>
        <td>上刊客户(续刊)</td>
        <td>数量(杆)</td>
        <td>到期客户</td>
        <td>数量(杆)</td>
      </tr>
    </thead>
    <tbody>
      {{each list}}
      <tr>
        <td>{{$value.skCustomer}}</td>
        <td>{{$value.skNum}}</td>
        <td>{{$value.dqCustomer}}</td> 
        <td>{{$value.dqNum}}</td>
      </tr>
      {{/each}}
    </tbody>
  </table>
</script>

art-template 数据根据条件显示

{{if}}

{{else if }}

{{else}}

{{/if}}

<script id="test" type="text/html">
    <div>
        {{if bok==22}}
        <h1>线上</h1>
        {{else if bok==33}}
        <h2>隐藏</h2>
        {{else}}
        <h3>走这里</h3>
        {{/if}}
    </div>
</script>
<script>
    var data = {
        "bok":22
    };
    var html = template('test',data);
    document.getElementById("app").innerHTML = html;
</script>

当几个模块共用一个模板但dom结构不太相同时,有两种方法,一种是使用if else语句控制哪一个结构渲染出来

<!-- 月份多选 -->
  {{if monthChoice}}
  <div class="month clearfix">
      <span class="select-title">月份:</span>
      <div class="select-main">
          {{each months}}
          <label class="checkbox-inline">
              <input type="checkbox" class="month-check" name="{{id}}-month" value={{$index + 1}}>{{$value}}
          </label>
          {{/each}}
      </div>
  </div>
  {{/if}}

    <!-- 月份单选 -->
    {{if !monthChoice}}
    <div class="month clearfix">
      <span class="select-title">月份:</span>
      <div class="select-main">
          {{each months}}
          <label class="checkbox-inline">
              <input type="radio" class="month-check" name="{{id}}-month" value={{$index + 1}}>{{$value}}
          </label>
          {{/each}}
      </div>
  </div>
  {{/if}}

另外一种是全部渲染出来,再用css控制

#industry .month {
  display: none;
}

art-template为模板中dom元素的属性赋值

共用模板的时候有时我们也需要区分到底是哪个模块下的模板hmtl,比如现在每个模块都有单选按钮组或复选框组,但这些组要是同一个name我们才可以将其划为一组,所以我们需要利用将自定义数据传入模板,通过字符串拼接实现属性赋值

 <div class="year clearfix">
        <span class="select-title">年份:</span>
        <div class="select-main">
            {{each years}}
            <label class="checkbox-inline">
                <input type="radio" class="year-check" name="{{id}}-years" value={{$value}}>{{$value}}
            </label>
            {{/each}}
        </div>
    </div>
var yMoremSingal = { citys: citys, pays: pays, industrys: industrys, types: types, years: years, months: months ,id:'', yearChoice: true, monthChoice: false}

yMoremSingal.id = "all-issue-industry"
moreHtml = template("select-temp", yMoremSingal)
$("#all-issue-industry .all-select").append(moreHtml)

art-template调用子模板

{{include ‘main’}} 引入子模板,数据默认为共享
{{include ‘main’ a}} a为制定数据,但是同样必须是父级数据,可以看看下面的例子,如果不注入的a的话,引入的子模板是接受不到数据的

<script id="main" type="text/html">
    <ul>
       {{each list}}
            <li>{{$value}}</li>
        {{/each}}
    </ul>
</script>
<script id="test" type="text/html">
    <div>
        <ul>
            {{each person}}
                <li>{{$value.name}}</li>
            {{/each}}
        </ul>
        {{include 'main' a}}
    </div>
</script>
<script>
    var data = {
        person:[
            {name:"jack",age:18},
            {name:"tom",age:19},
            {name:"jerry",age:20},
            {name:"kid",age:21},
            {name:"jade",age:22}
        ],
        a:{
            list:['文艺', '博客', '摄影', '电影', '民谣', '旅行', '吉他']
        }
    };
    var html = template("test",data);
    document.getElementById("app").innerHTML=html;
</script>      
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值