YAHOO.util.Dom.batch
就在刚刚,带着梦想,我去了影院,结果还是晚了一步。。。其实我有两个目标,一个是《东邪西毒》终极版,一个是《贫民窟的百万富翁》,然而到了影院我发现《东邪西毒》的票价竟然是100元。。。远远超过了我的心里承受能力,所以我放弃了,另一个《贫民窟的百万富翁》票价是50元,还能接受,可是已经在19点05分上映了。。我去的时间已经晚了十几分钟,而下一场的时间是20点25分,我想了想,等看完了,就太晚了,所以我毅然决定返回,只听嗖的一声,我飞了回来。继续YUI。。。
YUI的Dom方法中的batch促成了大多数其他Dom方法的el可以使用数组,功劳不小哦~现在来看看batch方法:
batch: function(el, method, o, overrides) {
var collection = [],
scope = (overrides) ? o : window;
el = (el && (el[TAG_NAME] || el.item)) ? el : Y.Dom.get(el); // skip get() when possible
if (el && method) {
if (el[TAG_NAME] || el.length === undefined) { // element or not array-like
return method.call(scope, el, o);
}
for (var i = 0; i < el.length; ++i) {
collection[collection.length] = method.call(scope, el[i], o);
}
} else {
YAHOO.log('batch called with invalid arguments', 'warn', 'Dom');
return false;
}
return collection;
}
应该是比较好理解,如果el是id或者单节点的话,就直接返回,如果是数组的话就循环一下,最后输出数组。
可能但看这个不是很好理解,那么看个例子吧:
setStyle: function(el, property, val) {
Y.Dom.batch(el, Y.Dom._setStyle, { prop: property, val: val });
},
_setStyle: function() {
if (isIE) {
return function(el, args) {
var property = Y.Dom._toCamel(args.prop),
val = args.val;
if (el) {
switch (property) {
case 'opacity':
if ( lang.isString(el.style.filter) ) { // in case not appended
el.style.filter = 'alpha(opacity=' + val * 100 + ')';
if (!el[CURRENT_STYLE] || !el[CURRENT_STYLE].hasLayout) {
el.style.zoom = 1; // when no layout or cant tell
}
}
break;
case 'float':
property = 'styleFloat';
default:
el.style[property] = val;
}
} else {
YAHOO.log('element ' + el + ' is undefined', 'error', 'Dom');
}
};
} else {
return function(el, args) {
var property = Y.Dom._toCamel(args.prop),
val = args.val;
if (el) {
if (property == 'float') {
property = 'cssFloat';
}
el.style[property] = val;
} else {
YAHOO.log('element ' + el + ' is undefined', 'error', 'Dom');
}
};
}
}()
我们可以看到setStyle里使用了Y.Dom.batch(el, Y.Dom._setStyle, { prop: property, val: val });,很容易理解吧哈。。。也不晓得该怎么解释。。就这样吧哈。。
这篇文章发布于 2009年03月28日,星期六,20:37,归类于 YUI。 您可以跟踪这篇文章的评论通过 RSS 2.0 feed。 您可以留下评论,或者从您的站点trackback。
下次周二周三去,半价!
@小马 这倒不错哈~