2007年9月26日星期三

XUL: property与attribute有什么区别?

XUL Elements的说明文档,会碰到Attributes列表和Properties列表,这两个有什么不同?

Attributes:
someValue = element.getAttribute("someAttribute");
element.setAttribute("someAttribute", someValue);
Properties:
someValue = element.someProperty;
element.someProperty = someValue;

前者是按DOM的思路的,而后者是将XUL Element抽象成对象了。但两者是等价的么?如果下两句话一块儿执行,会是怎样的结果?

textbox.value = "First value";
textbox.setAttribute("value", "Second value");
答案是: 界面会显示"First value",但你用text.getAttribute("value")会取到"Second Value"(或者用DOM Inspector可以看到)。

所以这两个东西还是有点不一样。但你在.xul文件里面设置的attribute怎么能直接反映到界面中? 反正比较复杂。 详细的说明可以看这篇文章:
XUL Solutions: Attributes and properties: the essential difference

基本上是说在用代码操纵时最好用properties,但在XBL中就得注意了。

我还注意到其它一些小差别:
1. 有些attribute没有对应的property,反过来也是;
2. attribute和property可能存在一些大小写的差别,比如tabindex和tabIndex。一般而言attribute倾向于contextmenu或者wait-cursor这样的风格,而property倾向于contextMenu。但也不是绝对的(比如sortDirection这个attribute), XUL里面这个有点混乱;

没有评论: