Saturday, 25 October 2008

Blogging with Window Live Writer

尝试着用Windows Live Writer来写Blog,期望能够把code装饰得好看些。

这是一个例子,用的插件是:Code Snippet plugin for Windows Live Writer

   1: var exampleFunction = function() {
   2:      alert('hello')
   3: };
   4:  
   5: window.addEvent('domready', function() {
   6:     exampleFunction();
   7: });

看看实际效果如何。还行,只是需要手工删掉tag之间多余的空格。

Friday, 3 October 2008

Access Radio Button with MooTools

在以前手工书写JavaScript,效验Form数据的时候,对Form中的Radio Button的处理,是使用“循环检测”来实现,显得很冗长。利用现有的JavaScript库,可以使代码大大简化。

假设,Form中有一组name为gender的Radio Button。其values,有male和female。用MooTools 1.2来写JavaScript Code,获取Radio Butten的状态,可以这样:

function getGender() {
var item = $(document.body).getElement('input[name=gender][checked]');

return item != null ? item.value : null;
}

如果对同一个页面上的多组Radio Button取值,比如对name的开始部分,同为bginfo_的多组Radio Button,使用$$():

  $$('input[name^=bginfo_][checked]').each( function(item, index) {
...
item.value;
...
} );

如果查阅jQuery中关于Selectors/checked的资料,能够看到$("input:checked")这样的写法。类似的,在MooTools中,就要写成$$('input[name=gender]:checked')。把':check'当成Selectors.Pseudo这样的写法,在FireFox和Opera中一切正常,但在Internet Explorer里面,就不能得到正确的结果。这个在MooTools文档中没有,大概正原于此吧。(注:更多的测试表明,$$('input[name=gender]:checked'),是能够在IE中工作的。不知道当初是怎么回事。)

设置Radio Butten的状态,则写成这样。没有兼容性的问题。

function setGender( gender ) {
$$('input[name=gender][value=' + gender + ']').setProperty('checked',true);
}

或者

function setGender( gender ) {
$(document.body).getElement('input[name=gender][value=' + gender + ']')
.setProperty('checked',true);
}

借助于MooTools的Selectors,对Radio Button的访问,现在简单了。

Working Directory in PHP Destructor

最近工作的一个Web项目,需要将目标的工作状态,保持到文件中。尝试着用Constructor和Destructor来解决,一个保存,一个恢复。在开发和发布的过程中,遇到了PHP工作路径的问题。

这里是一段测试代码:

<?php

class ClassA {
function __construct() {
echo "construct\t" . getcwd() . "<br />";
}

function run() {
echo "running\t" . getcwd() . "<br />";
}

function __destruct() {
echo "destruct\t" . getcwd() . "<br />";
}
}

$objA = new ClassA();

$objA->run();

?>

在Windows开发平台下,三个函数给出了所期待的、一致的答案。而在Linux平台下,__destruct()里面给出的工作路径,却是指向了'/'。

这个问题,有人认为是一个Bug,见这里。在PHP的手册中,有这样的说明

Note: Destructors called during the script shutdown have HTTP headers already sent. The working directory in the script shutdown phase can be different with some SAPIs (e.g. Apache).

这样的解释,是可以接受的。实际使用过程中,需要小心注意。在__destruct()里面,如果涉及到FileSystem的操作,避免使用相对路径,应使用绝对路径。