2014-03-04 58 views
0

我有一个映射定义的模型创建和填充模型实例:煎茶的ExtJS通过Ajax

Ext.define('IM.model.Source', { extend : 'Ext.data.Model', fields : [ 
    { 
    "name": "billref_id", 
    "mapping": "billref.id" 
    },... 

如果我用这个模型创建一个存储网格并加载,存储中的每个记录都有从我的JSON数据中正确初始化billref_id属性为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数据。 只有模型的非映射成员才会分配值。

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

回答

2

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

解决你的问题,你可以拨打读者的read功能与您的AJAX对象:

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

这将创建一个Ext.data.ResultSet包含您的正确映射记录。