Sencha extjs通过Ajax创建和填充模型实例

Sencha extjs通过Ajax创建和填充模型实例,extjs,Extjs,我使用映射定义了一个模型: Ext.define('IM.model.Source', { extend : 'Ext.data.Model', fields : [ { "name": "billref_id", "mapping": "billref.id" },... 如果使用此模型创建一个带有存储的网格并加载它,那么存储中的每个记录都会将billref_id属性正确初始化为JSON数据中的billref.id值 如果我改为使用Ext.Ajax.request加载

我使用映射定义了一个模型:

Ext.define('IM.model.Source', { extend : 'Ext.data.Model', fields : [
  {
    "name": "billref_id",
    "mapping": "billref.id"
  },...
如果使用此模型创建一个带有存储的网格并加载它,那么存储中的每个记录都会将billref_id属性正确初始化为JSON数据中的billref.id值

如果我改为使用Ext.Ajax.request加载相同的数据,然后以这种方式将该数据馈送到模型实例中:

var response = Ext.Ajax.request({
            async: false,
            method:'GET',
            url: 'im_read.json',
            params:{pkValue:1}
});
var items = Ext.decode(response.responseText);
record = Ext.create('IM.model.Source', items.rows[0]);
结果记录没有从JSON数据填充映射字段。 只有模型的未映射成员具有指定的值

以这种方式创建和填充模型实例不适用于映射字段是一个已知问题,还是我做错了什么? 谢谢,

型号的字段仅由a使用,通常在您的商店中配置。如果您自己创建模型实例,则不会考虑映射,因为不会调用读取器,并且模型希望您通过字段名称提供数据(请参阅)

要解决您的问题,您可以使用AJAX对象调用reader函数:

var response = Ext.Ajax.request({
    async: false,
    method:'GET',
    url: 'im_read.json',
    params:{pkValue:1}
});
var resultSet = myStore.getReader().read(response);
这将创建一个包含正确映射的记录的