Extjs4中Model的字段不能包含点、破折号等特殊字符

The fields of Model in Extjs4 can not contains some special characters, such as dot, dash

我必须维护一个由 extjs4.2 开发的遗留项目。但我发现网格不能使用带有动态字段的商店。并且该字段包含导致错误的字符破折号和减号。请看一下下面的代码片段并关注网格存储的字段。它将抛出语法错误 'Invalid left-hand in assignment'.


    Ext.create('Ext.grid.Panel',{
       title:'mygrid',
       store: Ext.create('Ext.data.Store'{
         fields:['group','alfa=-2.0','alfa=0','alf=2.0'],
         data:[
            {'group':'beta', 'alfa=-2.0':1.3, 'alfa=0':1.4, 'alfa=2.0':1.5 },
            {'group':'beta', 'alfa=-2.0':1.3, 'alfa=0':1.4, 'alfa=2.0':1.5 },
         ]
       }),
    
     columns:[
        {'dataIndex':'group','header':'group'},
        {'dataIndex':'alfa=-2.0','header':'alfa=-2.0'},
        {'dataIndex':'alfa=0','header':'alfa=0'},
        {'dataIndex':'alfa=2.0','header':'alfa=2.0'}
     ]
    });

您的示例包含语法错误。 Ext.create('Ext.data.Store'{ 第一个参数后缺少 ,

在后台,Ext 正在调用 recordDataExtractorTemplate 将尝试使用点表示法访问记录值。这导致代码 value = source.alfa=-2 && source.alfa=-2.0; 显然在语法上不正确。

以下任何解决方案都可能有效。看你选择哪一个。

  • 如果这些字段未在应用中广泛使用,则在可能的情况下更改代码中的字段名称的最快解决方案。
  • 您可以检查Ext 的更高版本是否修复了这个问题。然而,迁移可能会很痛苦。
  • 您可以创建 Ext.data.reader.Reader 的覆盖并修补失败的函数。