我有一个使用映射定义的模型:
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实例对映射字段不起作用或者我做错了是否是一个已知问题? 谢谢,
答案 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}}。