ExtJS模型字段有映射选项。
fields: [
{name: 'brandId', mapping:'brand.id', type: 'int'},
{name: 'brandName', mapping:'brand.name', type: 'string'},
问题是:如果服务器响应不包含某些字段(例如我的示例中的品牌字段),并且定义了内部字段的映射,则Ext Store会默默地无法加载任何记录。
有人遇到这个问题吗?这是一种错误吗?
更新: 为了让它更清楚:假设我的模型有十个字段。来自服务器的响应有九个字段,缺少一个字段。如果此字段没有嵌套映射(mapping:'x.y.z'),则一切正常-存储器加载记录,该字段为空。但是,如果必须从某个嵌套字段加载此字段并具有映射选项,则存储器将无法加载任何内容。
更新2: 我已经找到了引起问题的代码。事实是:当Ext尝试从Json加载某个字段时,它执行以下检查
(source["id"] === undefined) ? __field0.defaultValue : source["id"]
当字段有映射选项(mapping 'brand.id')时,阅读器会以以下方式进行
(source.brand.id === undefined) ? __field20.defaultValue : source.brand.id
如果源数据没有品牌字段,会导致错误。
如果您遇到同样的问题,您可以通过重载Ext.data.reader.Json的方法createFieldAccessExpression来解决它。
brand
的实际数据(响应中未接收到brand
),因此 Store 无法获取brand.id
和brand.name
。如果无法确定brand
,那么 Store 如何知道是否已更改此字段以与服务器上的实际数据进行比较以进行更新。因此,在这种情况下,事件处理将是不可能的。 - U and me