【ExtJs】TypeError: Cannot read property ‘parentNode‘ of undefined

分析1、特别注意,ExtJs在定义ID时必须是全局唯一性,当打开两个界面,两个界面中组件ID相同,当关闭其中一个页面时,组件销毁,在另一个页面时将找不到父节点。因为不知道销毁的是哪一个组件。

特别是在封装通用组件时,不要定义组件的ID,而要改成itemId,否则不同页面同时显示时用到相同的组件ID,就会出现如下错误:TypeError: Cannot read property 'parentNode' of undefined.
 


分析2、Extjs开发一个系统,各个页面定义组件ID的时候,必须是全局唯一性,否则当加载有同一个ID的两个页面的组件后,关闭其中一个页面会因为不能确定关闭是那个组件就报找不到父亲节点的错误:

TypeError: Cannot read property 'parentNode' of undefined.

这个错误是指:没有父节点,都是野孩子,并不是指‘parentNode’这个属性没有定义,但可以理解为某个属性定义错误,这个错误害足足找了一天啊。
 


Extjs 中id与itemId的区别


为了方便表示或是指定一个组件的名称,我们通常会使用id或者itemId进行标识命名。(推荐尽量使用itemId,这样可以减少页面唯一标识而产生的冲突)


id:
       id是作为整个页面的Component的唯一标识,这也意味着在整个页面中只允许有唯一一个名称的id,同时这里的Component的id也将变为element中的id,所以如果出现了两个,页面将会出现崩塌变形等等不可以想象的问题。
       而作为一个组件是必须有自己的唯一标识(id)的,在没有设置Component的id的时候系统将自动为组件添加id

itemId:
       itemId是用于container底下的元件的,这也说明itemId只是一个局部的元件标识名称,在全局上是不需要遵循唯一性的。

   从上面的叙述中可以看出一些使用上需注意的地方

  1. 若你要取得相关的Component 若是属于container 请设置id

  2. 若是只属于某个container 底下的元件,请设置itemId;某些情况下当然你也可以连同id 一起设置,比如需要改变css style,除此之外itmeid 还是优先的选择

  3. getCmp 以及getComponent 是不一样的,使用上必须注意,必须搭配id 以及itemid 使用

   如此一来id 与itemid 就会有从属关系,非必要不需定义id,也不会造成在定义id 时需要编码避免重覆,而因为itemid 是属于某个id 底下的,所以即使itemid 重覆,也可以利用唯一的id 利用Ext.getCmp 取得参照后,在接着使用getComponent 取得所属itemId 的参照。

 

怎么获取id和itemId的组件和元件(从以上可以明显的看出,itemId是个局部的元件名称):

id: Ext.getCmp(id);

itemId:Ext.getCmp(id).getComponent(itemId);.


参考链接:

https://blog.csdn.net/heirenheiren/article/details/39932979

Extjs4---Cannot read property 'addCls' of null
https://blog.csdn.net/heirenheiren/article/details/39896029


https://forum.sencha.com/forum/showthread.php?108750-TypeError-Cannot-read-property-parentNode-of-undefined

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值