【问题标题】:ExtJS Issue with boolean data and grid column list filter as well as Ext.Data.Store布尔数据和网格列列表过滤器以及 Ext.Data.Store 的 ExtJS 问题
【发布时间】:2021-09-24 06:23:49
【问题描述】:

我正在使用 ExtJS 6(尽管据我所知它也适用于 7.4 版),并且我有一个带有 booleancolumn xtype 的网格。对于那个布尔列,我想使用过滤器列表选项。是的,我知道有一个布尔过滤器选项,但是我不喜欢它使用单选按钮的工作方式。我希望能够使用复选框选择是或否,但是我发现只有值为 true 的选项才有效。这是我的专栏配置:

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

当排除 '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 论坛指导的,因此我想提出这一点,以防它对某人有所帮助。

【问题讨论】:

    标签: extjs


    【解决方案1】:

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

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

    然后,您将从您的 ExtJS 代码版本中复制构造函数代码,该代码位于“.....”所在的位置(如果构造函数参数可能不同,您也必须更新它们)并添加我在上面的“问题”中所做的建议更改。搜索 Extjs 代码中的 Ext.define('Ext.data.Model' 应该可以轻松到达那里,然后只需滚动到构造函数即可。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-12
      • 2014-08-03
      • 1970-01-01
      • 2013-09-11
      • 1970-01-01
      • 2012-06-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多