星期一, 三月 09, 2009

Javascript: 打印对象

alert() 是我们调试阶段经常使用的方法,可以查看目标变量的值。但是,如果目标变量是对象,如:

var foo = {'key1': 'foo1', 'key2': 'foo2'};
alert(foo);

其显示结果是 [object Object]。这对于调试没有多大用处。再试下这个:

for(myKey in myObj){
alert ("myObj["+myKey +"] = "+myObj[myKey]);
}

虽然可以显示期待的结果,但有点麻烦(或者可以将上面的代码封装在一个方法里)。

对于 Gecko 内核的浏览器,可以使用对象的 toSource() 方法,这是其 Javascript 的一个特性。

alert(foo.toSource());

其打印结果是: ({key1:”foo1″, key2:”foo2″})。

最后,当然不能忘了 Firebug 这个利器:

console.log(foo);

其打印结果是:Object key1=foo1 key2=foo2

星期六, 三月 07, 2009

Vim: EnhancedCommentify,一个好用的注释插件

如果不习惯于“老老实实”地一行一行添加注释符的话,可以试下 EnhancedCommentify 这个 Vim 的插件。它对支持目前大多数文件格式的注释,如 PHP、Python、Java、C/C++ 等等。

下载地址

执行 :call EnhancedCommentify('yes','comment') 即对当前行进行注释;反之,执行 :call EnhancedCommentify('yes','decomment') 则对当前行进行反注释。

为了使用方便,可以对上面的命令进行键盘映射:

" 设置注释
map < F2> < ESC>< ESC>:call EnhancedCommentify('yes','comment')< CR>
" 取消注释
map < F2> < ESC>< ESC>:call EnhancedCommentify('yes','decomment')< CR>

具体的使用方法,可以查看插件里面的 doc。

Have fun :)

星期五, 三月 06, 2009

Dojo: Dialog 的 onClose 事件

对于dijit.Dial0g 为说,是没有 onClose 事件的,当你关闭它,只是将它隐藏而已。所以,应该用 hide 事件来代替。如:

var dialog = dijit.byId("fooDialog");
dialog.connect(dialog, "hide", function(e){
/* do every thing here */
});

当 dialog 调用 hide() 隐藏自身时,会触发事件。

星期二, 三月 03, 2009

Dojo: Layout 的问题

< id="wrap">  
< id="main" dojotype="dijit.LayoutContainer">
...

在 使用 Dojo 的 Layout(dijit.layout.xxxx),其 Wrap 容器必须设定其大小,如 style=”width:100px;height:100px;”。否则,将会显示空白页。在 1.2.3 和 1.3 都存在这个问题。如果其 Wrap 窗口是 Body,则将 Body 设为 style=”width:100%;height:100%;position:absolute” ;或者,将 Body 设为 style=”width:100%;height:100%;”, 将 #main 设为 style=”position:absolute”。

虽然不知道这是不是 Bugs,或者是不是一个正确的解决方法,但确实能解决目前问题:例如 《Book of Dojo》中的 Mail 应用例子。