当前位置: > > > Rivets.js - 数据绑定和模板系统使用详解2(格式化器的使用、函数调用)

Rivets.js - 数据绑定和模板系统使用详解2(格式化器的使用、函数调用)

相关文章系列:
Rivets.js - 数据绑定和模板系统使用详解1(基本介绍、绑定器的使用)
[当前文章] Rivets.js - 数据绑定和模板系统使用详解2(格式化器的使用、函数调用)
Rivets.js - 数据绑定和模板系统使用详解3(组件封装、默认配置的修改)

五、自定义格式化器(Formatters)

格式化器(Formatters)可以将绑定的输入、输出数据修改成对应格式的数据,我们可以用它来格式化显示日期,数字,货币等。
同时它们可以使用与 Unix pipeline 类似的方式工作,每个的输出直接输入到下一个输入,因此我们可以将多个格式化器堆叠在一起使用。

1,单向格式化器

(1)这里以实现一个日期格式化为例,用来将时间戳转换成年月日的形式显示。
//日期格式化显示(时间戳 -> 年月日)
rivets.formatters.date = function(value){
  var date = new Date(value);
  var year = date.getFullYear();
  var month = date.getMonth() + 1;
  var day = date.getDate();
  return year + "-" + month + "-" + day;
}

(2)下面是测试样例,可以通过分隔符(|)将格式化器分配给相关的绑定
/********* 下面是js代码 ********/
//数据模型
var task = {
  name: "机房检修",
  startDate: 1402233167900
}

//绑定并显示模型
rivets.bind($("#detail"), {
  task: task
});

/********* 下面是html代码 ********/
<section id="detail">
  <span rv-text="task.startDate | date"></span>
</section>

(3)运行结果如下

2,格式化参数

格式化器可以接受任何数量的参数,参数可以是字符串,数字,布尔,nullundefined,或绑定的数据。
(1)下面对日期格式化器做个修改,增加两个参数。让用户可以自定义日期分隔符,以及结尾文字。
//日期格式化显示(时间戳 -> 年月日)
rivets.formatters.date = function(value, separatir, end){
  var date = new Date(value);
  var year = date.getFullYear();
  var month = date.getMonth() + 1;
  var day = date.getDate();
  return year + separatir + month + separatir + day + end;
}

(2)下面是测试样例,在格式化器后紧跟着参数
/********* 下面是js代码 ********/
//数据模型
var task = {
  name: "机房检修",
  startDate: 1402233167900
}

//绑定并显示模型
rivets.bind($("#detail"), {
  task: task
});

/********* 下面是html代码 ********/
<section id="detail">
  <span rv-text="task.startDate | date '/' task.name"></span>
</section>

(3)运行结果如下

3,双向格式化器

(1)如果我们要以特定格式存储值,可以使用双向格式化器实现。下面实现一个货币金额格式化器:
  • 代码中货币金额使用分为单位进行存储。
  • 显示时使用元为单位,小数点后保留两位。
  • 当设置模型值时(修改输入内容),将输入自动舍入到两位小数,并以分为单位存储。
//货币值格式化器(显示:单位元,保留两位小数。存储:单位分)
rivets.formatters.currency = {
  read: function(value) {
    return (value / 100).toFixed(2)
  },
  publish: function(value) {
    return Math.round(parseFloat(value) * 100)
  }
}

(2)下面是测试样例。
/********* 下面是js代码 ********/
//数据模型
var item = {
  price: 8820,
}
 
//绑定并显示模型
rivets.bind($("#detail"), {
  item: item
});
 
/********* 下面是html代码 ********/
<section id="detail">
  <input rv-value="item.price | currency">
</section>

(3)运行结果如下

六、函数调用

Rivets.js 提供了一个特殊的格式化器(call),用于在表达式中调用函数。下面通过样例做演示。

1,调用不带参数的方法

(1)这里实现一个简单的绑定方法,调用后返回一个字符串。
/********* 下面是js代码 ********/
//绑定的方法
var event = {
  hello: hello
}

function hello(){
  return "欢迎访问 hangge.com";
}

//绑定并显示模型
rivets.bind($("#detail"), {
  event: event
});

/********* 下面是html代码 ********/
<section id="detail">
  <span rv-text="event.hello | call"></span>
</section>

(2)运行结果如下

2,调用带参数的方法

(1)下面对前面的方法做个修改,增加 1 个参数。
  • 这个参数数量不定,可以是字符串,数字,布尔,nullundefined,或绑定的数据。
  • 在表达式中将参数跟在 call 关键子后面即可。
  • 任何参数值的变化都会触发函数的重新调用。
/********* 下面是js代码 ********/
//数据模型
var data = {
  name: "航歌",
  site: "hangge.com"
}

//绑定的方法
var event = {
  hello: hello
}

function hello(name){
  return "欢迎访问:" + name;
}


//绑定并显示模型
rivets.bind($("#detail"), {
  data: data,
  event: event
});

/********* 下面是html代码 ********/
<section id="detail">
  <span rv-text="event.hello | call data.name"></span>
</section>

(2)运行结果如下
评论0