gpt4 book ai didi

Extjs 如何在扩展时初始化新元素 - 而不会丢失范围

转载 作者:行者123 更新时间:2023-12-02 07:52:05 29 4
gpt4 key购买 nike

我正在尝试更好地扩展 Extjs 的类,而我的发展导致我遇到了这个问题:

我已经扩展了一个 Ext.Panel,我希望我的扩展有一个底部工具栏,默认情况下只有一个按钮。

myPanel = Ext.extend(Ext.Panel, {
method: function () {
return 'response!';
},

bbar: new Ext.Toolbar({
items:
[
{
xtype: 'button',
text: 'Hit me!',
handler: function (button, event) {
alert(this.method());
},
scope: this
}
]
})
});

我还没有了解到为什么不允许这样做。 this 指向全局范围而不是我的扩展面板 - 因此 .method() 在处理程序函数内是 undefined

最佳答案

您是在原型(prototype)而不是特定对象上定义 bbar。

覆盖 initComponent 并将 bbar 定义移到其中。

myPanel = Ext.extend(Ext.Panel, {
method: function () {
return 'response!';
},

initComponent: function() {
var bbar = new Ext.Toolbar({
items:
[
{
xtype: 'button',
text: 'Hit me!',
handler: function (button, event) {
alert(this.method());
},
scope: this
}
]
});

// Config object has already been applied to 'this' so properties can
// be overriden here or new properties (e.g. items, tools, buttons)
// can be added, eg:
Ext.apply(this, {
bbar: bbar
});

// Call parent (required)
myPanel.superclass.initComponent.apply(this, arguments);

// After parent code
// e.g. install event handlers on rendered component
}
});

参见 http://www.sencha.com/learn/Manual:Component:Extending_Ext_Components用于扩展组件时可以使用的模板

关于Extjs 如何在扩展时初始化新元素 - 而不会丢失范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3150204/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com