2007年7月24日星期二

我记得/记得我

- 你还会记得我吗?
- 唔,大概不会。
- 安慰一下我也好嘛!
- 我没有记住你,这不是我的错,而是你的问题。你没有让我记住你,说明你做的还不够。
 
 
ps: 要被记得,至少要选做下列一项:
1. 关心/照顾他/她/它;
2. 和他/她/它生活在一起;
3. 和他/她/它说话。

你让他/她/它记得你什么呢?

2007年7月7日星期六

(Javascript) HTAutoComplete:不要进行词法分析

Keep It Simple, Stupid. (保持简单,保持拙。)
 
上篇关于AutoComplete控件的思考中提到为了设计一个万能的自动完成控件,要对HTAutoComplete进行词/语法分析的想法,现在我改变主意了,那是一个自作聪明的愚蠢想法。
 
举个简单的例子,对于用户输入的如下文本,应该如何理解呢(允许输入引号本身,粗体表示)?
"a,b",c
可以有两种取词方式,
("a)(b")(c)
("a,b")(c)
我们该如何选择?
 
再复杂一点,对于引号不成对的输入:
"a,b",c"
更复杂一些:
",a,b,",c,"

换个符号对?
(a,b),c

You Can't Write Perfect Software. (你不可能写出完美的软件。)
由于允许输入特殊符号本身,和用特殊符号来分词本身就很矛盾和复杂。而一个Javascript控件,一个帮助工具,没有必要做成无所不能。提供的功能越多,所受的制约就越多。

我的建议:
1. 帮助类只帮助;
2. 让服务器去万能。

 

2007年7月5日星期四

关于AutoComplete控件的思考

一,现有控件的问题。

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

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

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

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

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

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


二,进一步抽象。

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

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