3

大多数情况下,当我多次单击同一个按钮时(两次或多次调用同一函数时),我会看到以下警告

[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
                                 });
4

2 回答 2

5

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

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

为什么要用itemIdover id

当没有可用的对象引用时,itemId 可用作获取对组件的引用的替代方法。不要使用带有 Ext.getCmp 的 id,而是使用带有 Ext.Container.getComponent 的 itemId,它将检索 itemId 或 id。由于 itemId 是容器内部 MixedCollection 的索引,因此 itemId 的范围仅限于容器本地 - 避免与需要唯一 id 的 Ext.ComponentManager 发生潜在冲突。

于 2012-05-16T18:01:24.487 回答
0

根据您的控制器功能,这是因为在您第一次单击按钮时,Sencha Touch 会创建一个Ext.Image带有 id的logo。第二次logo创建了另一个具有 id 的图像,因此有 2 个组件具有相同的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是为了代表您实例的唯一字段,以确保没有具有相同id. 希望对您有所帮助。

于 2012-05-17T02:24:34.970 回答