警告说'Id`存在并且应该被销毁

时间:2012-05-16 17:48:30

标签: cordova sencha-touch extjs sencha-touch-2

大部分时间我看到以下警告,当我多次点击同一个按钮时(两次或多次调用同一个功能时)

[WARN] [WARN][Ext.Component#constructor] Registering a component with a id (`name`) which has already been used. Please ensure the existing component has been destroyed (`Ext.Component#destroy()`.

我应该destroy如警告所示?或者我该如何解决这个问题?

更新

function onPersonFound(imageData) {
           var image = Ext.create('Ext.Img', {
                                 src: "data:image/jpeg;base64," + imageData,
                                 id: 'logo',
                                 width: 372,
                                 height: 140
                                 });

2 个答案:

答案 0 :(得分:5)

  

[WARN] [Ext.Component#constructor]注册具有id的组件   (name)已经使用过。请确保现有的   组件已被销毁(Ext.Component#destroy()

警告表示您使用id:name创建和销毁组件的速度太快。因此,我建议您删除该组件上的硬编码id属性,而不是使用itemId

为什么要itemId使用id

  

可以使用itemId作为获取对a的引用的替代方法   没有对象引用时的组件。而不是使用   使用Ext.getCmp的id,使用带有Ext.Container.getComponent的itemId   将检索itemId或id。 因为itemId是一个索引   容器的内部MixedCollection,itemId的范围是本地的   容器 - 避免与Ext.ComponentManager的潜在冲突   这需要一个唯一的ID。

答案 1 :(得分:0)

根据您的控制器功能,这是因为您第一次点击按钮时,Sencha Touch会创建一个ID为Ext.Image的{​​{1}}。第二次创建另一个标识为logo的图像,因此有两个组件具有相同的logo。如果它们基于id属性,则会导致错误的查询结果。

在创建任何组件时,只需在id配置中更加“具体”,以确保任何时候都没有相同id的组件。例如:

id

注意:我写了function onPersonFound(imageData) { var image = Ext.create('Ext.Img', { src: "data:image/jpeg;base64," + imageData, id: 'logo' + person_id, width: 372, height: 140 }); 来表示实例的唯一字段,以确保没有相同person_id的图片。希望它可以帮到你。