2007年7月5日星期四

关于AutoComplete控件的思考

一,现有控件的问题。

最近初步完成了两个自动完成的控件,最原始的HTAutoComplete暂时只完成了最基本的功能,大多细节都没有时间去考虑,而主要精力都放在HTAutoComplete2这个控件上。HTAutoComplete2是一个主要用来帮助用户在一个文本框内自动完成输入一个或多个字符/串的控件,主要用途可以是多标签的输入。

完成了beta版后,有些朋友提出了各种问题,建议和意见,都很值得思考。

其中最为典型的问题是输入特殊字符和特殊输入的问题,一般的特殊字符(如Javascript正则表达式用的特殊字符等)基本都考虑到并一定程度上得到解决。但是由于最初设计上的"硬伤"和基于"K.I.S.S."原则上的考虑,像需要输入所有字符/串的需求似乎有点困难和没有必要。

问题:
现有beta版的控件上,已知还有一个特殊字符没有彻底解决——分隔符。没有办法获得分隔符本身,因为现在的版本只取得分隔符之间的字符/串。

方案:
可以将分隔符放在引号或者其他符号对中,如果这样,就需要进行语法分析,可以使用正则表达完成,理论上不是问题。

最后,现有控件需要进一步进行抽象和解耦。


二,进一步抽象。

自动完成的本质是什么?怎么进行抽象?

自动完成控件无非就是帮助用户更方便的输入,所以写自动完成控件需要做的就是这样:
捕获需要自动完成的关键字;
与候选匹配项进行匹配;
返回并呈现匹配结果;
用户使用更方便的方法选中返回的候选匹配选项
自动完成替换,自动完成功能结束。
所以可以定义一个抽象的自动完成类,其他自动完成实例可以从这个抽象类继承,各个实例通过覆写抽象类的方法来完成自动完成工作。

没有评论:

发表评论