如何从覆盖方法中调用原始方法?
我有一个组合框,我正在从它的存储中删除其中一个值,以防止用户选择它,因为我们不再支持该值中的该值。如果组合框收到该值,我仍然希望该值能够正确显示,因为从技术上讲,它不是无效值;它只是不再受支持。为了实现我的目标,我想覆盖 getDisplayValue() 方法,这样,如果组合框收到的值不再存在于商店中,我希望覆盖方法返回正确的字符串,但如果它收到任何其他值,我希望原始方法来处理它,如下所示:
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() 时定义。)
最佳答案
即使问题已得到解答,这里还有另一种更好的方法来解决您的问题。这就是 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);
}
});
关于javascript - ExtJS:如何从覆盖中调用原始方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36070525/