IE中float的问题
在UI设计中,我们经常需要做一些浮动面板,点击后能够隐藏/显示,同时右侧/左侧的区域能够自动延伸。一般来说,我们可以固定浮动的面板width,
然后非浮动区域的padding-left或者padding-right为浮动面板的宽度,这样,只要隐藏的时候将padding-left设置为0即可,而且非浮动区域可以在不同的
分辨率下自适应。不过,该死的IE,如果你设置了非浮动区域的width为100%或者其他的值,那么浮动将无法实现,因此,不能显示声明非浮动区域的width,
及时它实际是100%。FUck IE,I love Firefox!
encoding惹的祸
由于page使用的gbk,但是ajax需要使用utf8,虽然一直凑合,但终究出现了问题。下了狠心,将encoding统一为utf8,包括mysql,smarty html模版,发现效率大大增强。首先由于mysql数据已经是utf8,所以使用json就无需再encoding了。此外,dojo.io发送上的数据,php可以直接识别,不用手动解析。我前篇post中说的那种情况就不复存在(因为都是utf8),当然这里有个附加选项,所有dojo.io.bind,需要强制encoding:utf-8。否则dojo使用自己的encodeAsicii就坏事了。还好,现在解决了我一直担心的问题。
完成3个核心的控件EpsContentEditor & EpsEditorPager,EpsLoadingInfo
这3个组件都是用纯dojo widget模式实现的,注册的名字空间是eps.widget,因此可以复用到以后的任何项目中。
EpsEditorPager
这是一个分页的组件,可以实现分页的编辑器。通过该组件,可以让普通的TextArea和input都能够支持分页。
目前实现的性能:
EpsContentEdito
这是一个Richtext和纯文本编辑组件,通过集成fckeditor提供所见所得的编辑器,
目前实现的性能:
TODO:
More:
EpsLoadingInfo
一个类似“正在加载…”的指示条,具有普通,成功,错误3个状态(不同的样式),延迟关闭。
内容管理UI
调试了一天,在firefox下面好好的,在IE6下面总是报错,最后才发现是因为某些tag的嵌套在IE下面有问题,虽然显示正常,但是在js中无法得到正确的dom节点的css属性,还好最后还是找出来了。
DW8太占内存了,虽然我的T41是1G内存,但是开了Zend和Eclipse,Firefox后,再跑Dw8就有点吃劲了,另外DW8的code fold功能还是偏弱些,不太直观,于是今天换了notepad++,还是不错的,比较满意,而且是GPL的。
S1被S3替换
原S1服务器停止使用,S1上的论坛服务转移至S3。原S3的www负载均衡停止,目前暂时由S5一台提供www服务。
PHP decodeURIComponent实现
在使用dojo bind提交的时候,在php服务端接受的代码都是xxx形式,这是因为dojo.bind使用xmlhttp提交的时候,使用encodeURIComponent对提交的内容进行了encoding,在服务端接收的时候需要将其还原。对于Php5.1似乎可以使用html_entity_decode直接指定charset为utf-8来进行还原,但是对于php4则无法实现。Googling了半天,发现没有人解决,dojo的mailinglist有人提出过,但是没有解决,可能是php开发人员很少用dojo或者xmlhttp吧。没有办法,自己写了一个函数,虽然需要使用mb_string,但是也算是解决了这个问题,我在httprequest的consturctur中判断,如果content_type为application/x-www-form-urlencoded则进行decoding。本来是打算写一个filter或者interceptor的,但后来一想没有必要,直接交由httprequest处理得了。
/**
* Hacking for decoding encodeURIComponent() && DOJO_encodeAscii
*
* NOTE:This function need Mb_string extension
*
* @param string $body
* @return string
*/
function decodeURIComponent($uri) {
//decode decimal HTML entities added by web browser
$uri = preg_replace(’/\d{2,5};/ue’, “utf8_entity_decode(’$0′)”, $uri );
//decode hex HTML entities added by web browser
//$uri = preg_replace(’/([a-fA-F0-7]{2,8});/ue’, “utf8_entity_decode(’’.hexdec(’$1′).’;')”, $uri );
return mb_convert_encoding($uri,’GBK’,'UTF-8′);
}
/**
* callback function for the decodeURIComponent
*
* Use Mb_string extension to decode utf-8 numericenties
*
* @param string $entity
* @return string
*/
function utf8_entity_decode($entity){
$convmap = array(0×0, 0×2FFFF, 0, 0xFFFF);
return mb_decode_numericentity($entity, $convmap,’utf-8′);
}
