如何从覆盖方法调用原始方法?
我有一个组合框,我从中删除其商店中的一个值,以防止用户选择它,因为我们不再支持该值中的值。如果组合框接收到它,我仍然希望正确显示该值,因为从技术上讲,它不是无效值;它不再受支持。为了实现我的目标,我想覆盖getDisplayValue()方法,这样,如果组合框接收到不再存储在商店中的值,我希望override方法返回正确的字符串,但如果它接收到任何其他值,我想要原始方法来处理它,如下所示:
myCombobox = Ext.create("Ext.form.field.ComboBox",
{
// <snip><snip>
getDisplayValue: function()
{
if (this.value == 'removedValue')
{
return 'Correct Text';
}
else
{
// What do I do here to call original getDisplayValue() and return its returned value?
}
}
});
更新
有人发布了一个答案,说使用this.callParent(arguments);但是在我发表评论说没有用之后他们就删掉了答案。我通过从被覆盖的函数(我从Sencha的网站获得)中输入源代码,得到覆盖函数来执行我想要在其他情况下执行的操作,但我宁愿使用解决方案涉及实际调用该函数,如果可能的话,因为它的源代码可能会在以后的ExtJS更新中更改(例如,用于修复错误),而我的将保持静态。
(请注意,我稍微更改了代码以查看值而不是rawValue,因为后者不一定是在getDisplayValue()调用时定义的。)
答案 0 :(得分:2)
即使问题得到解答,这是另一种解决问题的更好方法。这就是ExtJS在其某些内部类中将其称为父方法的方式。
Ext.create("Ext.form.field.ComboBox", {
getDisplayValue: function() {
if (this.rawValue == 'removedValue') {
// your logic
return;
}
return Ext.form.field.ComboBox.prototype.getDisplayValue.call(this);
}
});
答案 1 :(得分:0)
如果您使用Ext.define,则在4.1中它是callOverridden
,从4.2开始它是callParent
。
如果你使用Ext.create来创建一个组合框,/login
不会带你进入组合框的功能,而是带到基类的功能(triggerfield?),这不是你想要的。
我成功使用过的是这样的:
callParent
但如果你使用Ext.define从默认组合框中派生特殊组合框然后使用Ext.create('MyCombo',{
initComponent:function() {
var me = this;
me.callParent(arguments);
var oldFn = me.getDisplayValue;
me.getDisplayValue = function() {
if (this.rawValue == 'removedValue') {
return 'Correct Text';
} else {
oldFn.apply(this, arguments); // What do I do here to call original getDisplayValue() and return its returned value?
}
};
}
});
,那就更清晰了。