Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ExtJS:如何从重写调用原始方法?_Javascript_Extjs_Extjs4.2 - Fatal编程技术网

Javascript ExtJS:如何从重写调用原始方法?

Javascript ExtJS:如何从重写调用原始方法?,javascript,extjs,extjs4.2,Javascript,Extjs,Extjs4.2,如何从重写方法调用原始方法 我有一个组合框,我正在从它的存储中删除一个值,以防止用户选择它,因为我们不再支持该值中的该值。如果combobox接收到该值,我仍然希望该值能够正确显示,因为从技术上讲,它不是无效值;它只是不再受支持。为了实现我的目标,我希望重写getDisplayValue()方法,这样,如果组合框接收到不再存储的值,我希望重写方法返回正确的字符串,但是如果它接收到任何其他值,我希望原始方法处理它,如下所示: myCombobox = Ext.create("Ext.form.fi

如何从重写方法调用原始方法

我有一个组合框,我正在从它的存储中删除一个值,以防止用户选择它,因为我们不再支持该值中的该值。如果combobox接收到该值,我仍然希望该值能够正确显示,因为从技术上讲,它不是无效值;它只是不再受支持。为了实现我的目标,我希望重写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?
          }
      }
  });
myCombobox=Ext.create(“Ext.form.field.ComboBox”,
{
// 
getDisplayValue:函数()
{
if(this.value==“removedValue”)
{
返回“正确文本”;
}
其他的
{
//我在这里要做什么来调用原始getDisplayValue()并返回其返回值?
}
}
});
更新
有人发布了一个答案,上面说使用这个。callParent(arguments);但在我留下评论说那不起作用后,他们删除了答案。在else的情况下,我通过从重写函数(我从Sencha的网站上获得)中输入源代码,让重写函数实现了我想要的功能,但如果可能的话,我更愿意使用一种涉及实际调用该函数的解决方案,因为它的源代码可能会在以后的ExtJS更新中更改(例如,修复bug),而我的将保持静态


(请注意,我稍微修改了代码以查看值而不是rawValue,因为在调用getDisplayValue()时不一定定义后者。)

如果使用Ext.define,则在4.1中是,而在4.2中是

如果使用Ext.create创建组合框,
callParent
不会将您带到组合框的函数,而是带到基类(triggerfield?)的函数,这不是您想要的

我曾经成功地使用过这样的东西:

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?
            }
        };
    }
});

但是如果您使用Ext.define从默认的组合框派生特殊的组合框,然后使用
callParent

即使问题已经得到了回答,这是解决问题的另一个更好的方法。这就是ExtJS在一些内部类中如何调用它的parent方法

Ext.create("Ext.form.field.ComboBox", { 
    getDisplayValue: function() {
        if (this.rawValue == 'removedValue') {
            // your logic
            return;
        }
        return Ext.form.field.ComboBox.prototype.getDisplayValue.call(this);
    }
});

您在回答中输入的代码对我来说不起作用,但定义了一个派生类,该派生类的GetDisplayValue()使用callParent()并从中创建了一个对象。谢谢。我更喜欢这样做。(无需定义派生类。)