首页 > 设计 > WEB开发 > 正文

15.2.如何创建一个自定义的Formatter

2023-07-22 12:39:00
字体:
来源:转载
供稿:网友
15.2.1 问题
假如你想创建一个自定义的formatter, 用来接收任何正确的字符串并以一个正确的格式来返回结果, 应怎么办呢?
15.2.2 解决办法
可以把Formatter 类扩展并把format 方法覆盖重写。
15.2.3 讨论
在format 方法里头, 可以创建一个名为SwitchSymbolFormatter 的成员并将一个特定格式的字符串传递给SwitchSymbolFormatter 的formatValue 方法, 这些包含着”#”号的字符串用来代入所需的内容的。举例说, 如果把”###-###”这个格式及”123456”这个字符串的传递给formatValue 方法, 它就会返回”123-456”。这个结果正是由我们所自定义的formatter 类中的format 方法返回的。

这些包含”#”号的字符串, 都会被所有传递给Formatter 的字符所代入。其工作原理十分简单,就是以循环的方式, 把这个字符串里每个字符逐个代入, 最后得出一个已经格式化的字符串。
代码如下:
+展开
-ActionScript
package oreilly.cookbook{
import mx.formatters.Formatter;
import mx.formatters.SwitchSymbolFormatter;
public class ISBNFormatter extends Formatter
{
public var formatString : String = "####-##-####";
public function ISBNFormatter()
{
super();
}
override public function format(value:Object):String
{
//我们需要去检查字符串的长度
//ISBN的长度可以分别为10或13位数
if( ! (value.toString().length == 10 ||
value.toString().length == 13) )
{
error="Invalid String Length";
return ""
}
//根据我们的format string的”#”号总数来计算
var numCharCnt:int = 0;
forvar i:int = 0; i<formatString.length; i++ ) {
if( formatString.charAt(i) == "#" ) {
numCharCnt++;
}
}
//如果我们不能给格式化的字符串提供长度符合的字符串的话
//这样子就会返回一个错误!
if( ! (numCharCnt == 10 || numCharCnt == 13) ) {
error="Invalid Format String";
return ""
}
//如果formatString跟所提供的值都有效, 就把这个数目格式化.
var dataFormatter:SwitchSymbolFormatter =
new SwitchSymbolFormatter();
return dataFormatter.formatValue( formatString, value );
}
}
}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表