Ext-JS删除组件陷阱
Ext-JS remove component gotcha
>我有一个组件就像一个表格行,叫做flightLegComponent,如下所示:
[ flight leg component ] [-] [+]
[ flight leg component] [-] [+]
。
按下 [-] 按钮时,该组件将从父面板中移除。
我在 [-] 按钮中添加了一个侦听器,在侦听器中,我调用
this.remove(theFlightLegComponent);
其中"this"是父组件。
这引发了一个异常,显然,您无法删除事件处理程序中的组件......删除它的正确方法是什么?延迟后调用方法?
新增功能:
面板的结构如下:
_flightLegRow: function(removable) {
var flightLegInput = new xx.yy.zz.search.FlightLegInput({
columnWidth: .8
});
var legId = 'flightLeg-' + this.legs++;
var c = {
border: 0,
width: '90%',
layout: 'column',
id: legId,
items: [
flightLegInput,
{
columnWidth: .2,
margin: 10,
border: 0,
layout: {
type: 'column'
},
items: [{
xtype: 'button',
text: '-',
disabled: !removable,
listeners: {
click: Ext.Function.bind(function() {
//debugger;
this.remove(legId, true);
}, this)
}
},{
xtype: 'button',
text: '+',
listeners: {
click: Ext.Function.bind(function(){
this.add(this._flightLegRow(true));
}, this)
}
}]
}
]
};
return c;
}
您可以删除事件处理程序中的组件,您需要记住以传递正确的范围。 如果要删除组件,它可能正在调用父项 autoDestroy 配置女巫可能会完全删除它,并可能导致空指针异常。 我猜按钮处理程序的函数是在按钮范围内调用的,并且它抛出了一个异常 this.remove 是未定义的。 任何代码或异常消息都有助于查明问题。
new Ext.button.Button({
handler: function(){this.remove......},
scope: this
})
这是您应该用于按钮的代码:b.ownerCt 将是 FlightLegComponent,其所有者 Ct 将是包含 FlightLegComponent 的面板,这样您就可以将其删除。
{
xtype: 'button',
text: '-',
disabled: !removable,
handler: function(b) {
b.ownerCt.ownerCt.remove(legId, true);
}
}
相关文章:
- React重新渲染但未显示正确的组件
- 不能从angular2中的子组件指定父组件中的数组
- 拨打'父亲'函数形式a'儿童'ReactJS中的组件
- React组件等待所需道具进行渲染
- 如何创建带有插槽的vue js组件预加载程序
- KnockoutJS-组件-多个实例
- 如何更改reactjs中外部/独立组件的状态或属性
- 如何在react js中将值从一个组件发送到另一个组件
- React Native通过Navigator将用户输入数据传递到选项卡栏IOS中的组件
- React组件-设置页面标题
- 我的shareService在angular 2中发送值工作正常,但当我渲染我的另一个组件时,会获得默认值
- 如何在salesforce aura闪电组件中使用jQuery.val()
- 为react组件传递道具的最佳方式
- [Vue warn]:未能解析组件
- 如何控制组件'的createContent函数被激发
- react组件中的绑定方法
- 如何在react js中移动第二个组件
- 多个组件是如何实现的
- 组件生命周期问题/无法处理未定义的问题
- Ext-JS删除组件陷阱