我使用的是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 论坛直接到这里的,我想提出这个问题,以防它对别人有帮助。
1条答案
按热度按时间5sxhfpxr1#
既然我的帖子已经有了答案,我将发布一个更好的方法来完成它,而不是直接更改Ext代码文件(无论这是不是正确的方法,我可能是错误的)。相反,您可以创建一个新的js文件,需要将其包含在您的应用程序中(您可以将其命名为ext-overrides.js)。在新的js文件中,您只需键入:
然后,您可以从您的ExtJS代码版本中复制构造函数代码,其中.....“”是(如果构造函数参数可能不同,您也必须更新这些参数),并添加我在“question”中所做的建议更改。应该很容易就能找到,然后滚动到构造函数。