我正在尝试包装一个HTMLElement来创建一个Ext.Element,但是这个神秘地用一些ID覆盖了Ext.id函数并使得ExtJs在那之后无法使用
我试图制作这个简单的例子来说明问题,虽然我不得不在原始应用中挖掘很多代码来找到这个微妙的错误,例如在线试用此代码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'lext-gen2'
注意:我知道我应该使用新的Ext.Element,但这不是问题,问题是为什么会出现这个简单的可能错误?
答案 0 :(得分:4)
我已经浏览了源代码,并且有一些功能,如果在错误的范围内调用将覆盖Ext.id
。遗漏new
可能正是这样做的。在创建Ext
Element
的{{1}}对象实例的上下文中调用其中一个函数。
见:
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