ExtJS与布尔数据和网格列列表筛选器以及Ext.Data.Store有关的问题

wkyowqbh  于 2022-11-04  发布在  其他
关注(0)|答案(1)|浏览(168)

我使用的是ExtJS 6(虽然我可以告诉它适用于7.4版本),我有一个带有布尔列xtype的网格。对于布尔列,我想使用过滤器列表选项。是的,我知道有一个布尔过滤器选项,但我不喜欢它使用单选按钮的工作方式。我想能够通过复选框选择是或否,但是我发现只有值为true的选项起作用。下面是我的列配置:

{
header: 'Active'
, dataIndex: 'inactive'
, xtype: 'booleancolumn'
, trueText: 'No'
, falseText: 'Yes'
, filter:{
            type: 'list',
            options: [[true,"No"],[false, "Yes"]]
        }
}

当排除'options'属性并让它从存储中获取数据时,这并不起作用。在查看代码后,我发现它接受'options'配置并使用该配置作为数据创建自己的Ext.Data.Store。请看这里的一个简单示例,运行该示例会遇到同样的问题:

var teststore =  new Ext.data.Store({
        fields: [
            'id',
            'text'
        ],
        data: [[true,"No"],[false, "Yes"]]
    });

问题是'false'布尔值被更改,并替换为动态创建的泛型id。我发现问题出在以下行的'Ext.data.Model'的构造函数中:

if (!(me.id = id = data[idProperty]) && id !== 0) {

如果该行的计算结果为true,则会将ID替换为生成的ID。为了解决此问题,我在if语句的末尾添加了'*&& id!== false***',这样就解决了此问题。
我还没有完全测试过这个,但是逻辑看起来很合理,看起来像是发生了相同类型的问题,值为'0',因此出现了
' && id!== 0'**。由于我们是从 Sencha 论坛直接到这里的,我想提出这个问题,以防它对别人有帮助。

5sxhfpxr

5sxhfpxr1#

既然我的帖子已经有了答案,我将发布一个更好的方法来完成它,而不是直接更改Ext代码文件(无论这是不是正确的方法,我可能是错误的)。相反,您可以创建一个新的js文件,需要将其包含在您的应用程序中(您可以将其命名为ext-overrides.js)。在新的js文件中,您只需键入:

Ext.override(Ext.data.Model, {
    constructor: function(data, session) {
        .....
    }
}

然后,您可以从您的ExtJS代码版本中复制构造函数代码,其中.....“”是(如果构造函数参数可能不同,您也必须更新这些参数),并添加我在“question”中所做的建议更改。应该很容易就能找到,然后滚动到构造函数。

相关问题