大部分时间我看到以下警告,当我多次点击同一个按钮时(两次或多次调用同一个功能时)
[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
});
答案 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
的图片。希望它可以帮到你。