论坛首页 Web前端技术论坛

[07/9/28] 总结一下mootools的瑕疵吧 (持续更新)

浏览 5255 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-09-14  
这个帖子我会慢慢总结一些不足,欢迎大家补充,并即时更正我的错误.

(这些不足如果在新版本里已经修正,我会标出.svn上的版本我不做考虑)

1 each方法无法break.
例子: 找出一个数组中的第一个偶数.
var myarr=[1,2,3,15,5,21,22];
var rs=0;

myarr.each(function(val,idx){
if (val%2 ==0 ) {
rs=val;
return ; //return不是我想要的,我想在这里方便快捷的结束each,咋办?
}
});

目前我想到的是 使用 throw抛出一个异常,不知道各位还有更好的解决方案没.
(当然修改moo源代码可以得到更好的方案)

2 Element对象没有setValue方法.
这个比较不能忍啊 呵呵,想设置页面表单域的值都要自己想办法,不理解为啥!


3 Json.Remote对象里的hardcode.
见代码里的这句大家就明白了:
send: function(obj){
return this.parent(this.url, 'json=' + Json.toString(obj));
}
我想用这个方法,那服务端只能接受名为json的json序列化字符串. 太不灵活了.

4 Json.Remote的send是否应该考虑支持发送多个json串呢?

5. Class 里的一个bug
var Class = function(properties){
	var klass = function(){
		return (arguments[0] !== null && this.initialize && $type(this.initialize) == 'function') ? this.initialize.apply(this, arguments) : this;
	};
	$extend(klass, this);
	klass.prototype = properties;
	klass.constructor = Class;
	return klass;
};

如果 我要传的第一个参数就是null时 那么整个类机制将失效

例如 一个类的构造方法有两个参数 ,而他又有一个子类 子类也是如此
我在创建子类的时候,如果构造方法的第一个参数我就是要传null,
那么在子类里调用父类的方法将失败.
修改方法 将 null 换成其他的特殊值.
在新版本moo里 用的是 moo定义的 $empty
arguments[0] !== $empty





   发表时间:2007-09-14  
fins 写道
这个帖子我会慢慢总结一些不足,欢迎大家补充,并即时更正我的错误.
2 Element对象没有setValue方法.
这个比较不能忍啊 呵呵,想设置页面表单域的值都要自己想办法,不理解为啥!


setProperty 应该可以吧, 它就是做这些事的。
0 请登录后投票
   发表时间:2007-09-14  
Array.prototype.each=function(fn){
    for ( var i = 0, ol = this.length, val = this[0]; i < ol && fn.call(val,i,val) !== false; val = this[++i] )
{}
}
function aa(index,val){
    if(val>2)
   return false;
     else
    alert(val)
}
[1,2,3].each(aa);
0 请登录后投票
   发表时间:2007-09-14  
不修改源码很麻烦啊!
0 请登录后投票
   发表时间:2007-09-14  
2 Element对象没有setValue方法.
确实是的,在Element.Form中,也只是提供了getValue方法

1 关于each,没有break也是可以忍受的啊,毕竟each还不是关键字啊
0 请登录后投票
   发表时间:2007-09-28  
又发现一个重大瑕疵
0 请登录后投票
   发表时间:2007-10-06  
zhw 写道
fins 写道
这个帖子我会慢慢总结一些不足,欢迎大家补充,并即时更正我的错误.
2 Element对象没有setValue方法.
这个比较不能忍啊 呵呵,想设置页面表单域的值都要自己想办法,不理解为啥!


setProperty 应该可以吧, 它就是做这些事的。

非常同意~!
Element.setProperty('value','value')完全可以
可能是mootools疏忽或者不想做重复的事情
0 请登录后投票
   发表时间:2007-12-18  
请问用prototype 可以实现

var obj=$("mydiv");
obj.update("<span>beforeObj</span>");
obj.insert("<span>name</span><span>id</span><span>password</span>");


而mootools必须
var obj=$("mydiv");
obj.setHTML("<span>beforeObj</span>");
  var a=new Element('span');
  a.setText("name");
  a.injectInside(obj);
  ............

有没有更好的方法?
0 请登录后投票
   发表时间:2008-06-25  
mootools1.1确实没有setValue,如果有的话,我相信用setProperty是没法替代的,它会考虑到input select span div 等很多可以插入值的元素,但是各个不一样,而且增加这么一个函数比之我们直接用.value或者.setHTML成本要大得多,对了,如果有的话,估计还会跟setHTML重复,完全没必要我认为,如果仅仅是相当于setProperty('value',value)的话,那为什么不直接.value呢
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics