我正在使用 ace 编辑器和 mootools。我刚刚将我的 mootools 更新到 1.4.5 版,当我在编辑器上单击/拖动时,我得到 js 异常:
Uncaught TypeError: Cannot read property 'clientX' of undefined
请帮助...谢谢
我正在使用 ace 编辑器和 mootools。我刚刚将我的 mootools 更新到 1.4.5 版,当我在编辑器上单击/拖动时,我得到 js 异常:
Uncaught TypeError: Cannot read property 'clientX' of undefined
请帮助...谢谢
我认为我找到了一种解决方法,而不是总是删除绑定方法。似乎只有几个 Mootools 版本有这个问题。所以我用这段代码来修复它们:
if (this.MooTools.build=='ab8ea8824dc3b24b6666867a2c4ed58ebb762cf0') {
delete Function.prototype.bind;
Function.implement({
/*<!ES5-bind>*/
bind: function(that){
var self = this,
args = arguments.length > 1 ? Array.slice(arguments, 1) : null,
F = function(){};
var bound = function(){
var context = that, length = arguments.length;
if (this instanceof bound){
F.prototype = self.prototype;
context = new F;
}
var result = (!args && !length)
? self.call(context)
: self.apply(context, args && length ? args.concat(Array.slice(arguments)) : args || arguments);
return context == that ? result : context;
};
return bound;
},
/*</!ES5-bind>*/
});
}
好处是我可以为每个构建单独修复它。缺点显然是我自己的代码附带了 mootools 代码。但目前我看不到其他选择,因为我为 Joomla 编码,我很确定正在使用的 mootools 版本数量有限。
我解决了我的情况!我从 mootools.js 中删除了一些行:
1) bind:function(e){var a=this,b=arguments.length>1?Array.slice(arguments,1):null,d=function(){};var c=function(){var g =e,h=arguments.length;if(this instanceof c){d.prototype=a.prototype; g=new d;}var f=(!b&&!h)?a.call(g):a.apply(g,b&&h?b.concat(Array.slice(arguments)):b||arguments);return g==e?f:g;};返回 c;}
2)删除Function.prototype.bind;
(我不需要在 mootools 中绑定鼠标,所以这对我来说是一个启示!)
这是一个非常奇怪的错误。在调试期间,我没有收到错误。但是一旦我删除断点,它就会再次出现。我终于通过将最新版本的 mootools 1.4.5 添加到 joomla 来解决这个问题。错误立即消失了。