gpt4 book ai didi

javascript - ExtJS 没有使用我的网格过滤器覆盖

转载 作者:行者123 更新时间:2023-12-03 05:57:20 25 4
gpt4 key购买 nike

我有一个项目,需要在其中制作自定义网格日期过滤器。

在有状态保存之前一切正常。我需要向状态添加自定义值。我重写了扩展 Ext.util.Filter 的类中的 getState 方法:

Ext.define('RelativeDateUtilFilter', {
extend: 'Ext.util.Filter',


getState: function () {
var config = this.getInitialConfig(),
result = {},
name;


for (name in config) {
if (config.hasOwnProperty(name)) {
result[name] = config[name];
}
}


delete result.root;
result.value = this.getValue();

//this is the line I added
result.relValue = this.relValue;


this.callParent();


return result;
}
});

我重写了过滤器基类,使其使用我自己的 util 过滤器:

createFilter: function (config, key) {
var filter = new RelativeDateUtilFilter(this.getFilterConfig(config, key));
filter.isGridFilter = true;
return filter;
}

问题是,我的 RelativeDateUtilFilter 类中的 getState 仅在我第一次创建过滤器时被调用。当 ExtJS 保存状态时,它使用基类 Ext.util.Filter 中的状态。
我可以通过将代码直接放入 Ext.util.Filter 类中来解决此问题,但我不想这样做,因为如果我想升级的话,这不太好。

简而言之,如何强制 ExtJS 在编写状态时使用我自己的 getState 方法?

感谢任何帮助!

编辑:

如果这对某人有帮助,我通过删除我的 RelativeDateUtilFilter 类和我的过滤器基覆盖,并将我的 getState 方法放入覆盖文件中来修复此问题:

Ext.define('Override.util.Filter', {
override :'Ext.util.Filter',

getState: function () {
var config = this.getInitialConfig(),
result = {},
name;

for (name in config) {
// We only want the instance properties in this case, not inherited ones,
// so we need hasOwnProperty to filter out our class values.
if (config.hasOwnProperty(name)) {
result[name] = config[name];
}
}

delete result.root;
result.value = this.getValue();

if(this.relValue) {
result.relValue = this.relValue;
}

return result;
}
});

(在/overrides/util/Filter,js 文件中,因此 SenchaCMD 可以正确加载)

再次感谢@bullettrain!

最佳答案

我相信在你的情况下你不需要 this.callParent();在您的重写方法中,这里有一个关于重写方法的不同方法的很好的解释 https://sencha.guru/2015/01/20/overriding-methods-safely/

关于javascript - ExtJS 没有使用我的网格过滤器覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39873560/

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