我试图包装一个HTMLElement来创建一个Ext.Element,但是这会神秘地用一些ID覆盖Ext.id函数,并使ExtJ在这一点之后无法使用。
我试着制作这个简单的例子来说明这个问题,尽管我不得不在原始应用程序中挖掘大量的代码来发现这个微妙的错误,例如,尝试这段代码在线http://jsfiddle.net/rdudW/1/或使用以下代码
<html>
<head>
<script type="text/javascript" src="adapter/ext/ext-base.js"></script>
<script type="text/javascript" src="ext-all.js"></script>
<script>
Ext.onReady(function(){
alert(Ext.id)
var elem = Ext.Element(document.getElementsByTagName('table')[0])
alert(Ext.id)
});
</script>
</head>
<body>
<table><table>
</body>
</html>在调用Ext.Element警报之前,显示函数定义,但之后显示id 'ext-gen2‘。
注意:我知道我应该使用新的Ext.Element,但这不是问题,问题是为什么这个简单的可能错误会发生呢?
发布于 2011-01-06 10:42:19
我已经浏览了源代码,并且有几个函子,如果在错误的范围内调用这些函子,就会覆盖Ext.id。new的遗漏很可能就是这样做的。其中一个函数是在正在创建的Ext对象instad的上下文中调用的。
见此:
Ext.Element = function(element, forceNew){
var id;
/* some code here */
id = dom.id;
/* some code here */
/**
* The DOM element ID
* @type String
*/
this.id = id || Ext.id(dom);
};如果您用new调用它,那么this引用新创建的对象。如果您直接调用它,this指的是Ext
https://stackoverflow.com/questions/4613763
复制相似问题