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

时间:2014-03-04 10:47:36

标签: 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加载相同的数据,然后以这种方式将该数据提供给Model实例:

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数据填充的映射字段。 只有模型的非映射成员才会分配值。

以这种方式创建和填充Model实例对映射字段不起作用或者我做错了是否是一个已知问题? 谢谢,

1 个答案:

答案 0 :(得分:2)

模型字段的mapping仅由Ext.data.reader.Reader使用,docs通常在您的商店中配置。如果您自己创建模型的实例,则不考虑映射,因为未调用读者,模型希望您按字段的名称提供数据(请参阅read)。

要解决您的问题,您只需使用AJAX对象调用阅读器的Ext.data.ResultSet函数:

var response = Ext.Ajax.request({
    async: false,
    method:'GET',
    url: 'im_read.json',
    params:{pkValue:1}
});
var resultSet = myStore.getReader().read(response);

这将创建一个包含正确映射记录的{{3}}。