我正在尝试计算/转换前端的id,但它不是由ExtJS完成的。例如:
fields: [{
name: 'test',
type: 'int'
}, {
name: 'id',
depends: [
'test'
],
convert: function(v, rec) {
return rec.get('test')%10;
}
}]
如果我现在加载到商店的五条记录,其中“test”的值为1,2,3,5,11,
https://fiddle.sencha.com/#view/editor&fiddle/2gpp
但是,这不能按预期工作,id始终是自动生成的,因此,重复数据删除无法按预期工作。
为什么会这样,我该如何解决?
答案 0 :(得分:1)
您应该考虑使用mapping方法接收使用reader配置的原始json数据,并且可以进行任何类型的预处理。而calculate和convert方法限制了对数据的访问,这些数据需要在使用之前在字段中定义。
fields: [{
name: 'test',
type: 'int'
}, {
name: 'id',
mapping(data){
return data.test % 10;
}
}]
答案 1 :(得分:0)
不工作的主要原因是idProperty
模型。
Defaults to:'id'
如果您要更改模型或字段名称中的idProperty
而不是id
,则depends
配置将有效。
您可以使用depends
配置检查此工作 FIDDLE 。希望这有助于/指导您使用depends
config。
CODE SNIPPET
Ext.application({
name : 'Fiddle',
launch : function() {
Ext.define('ModelName', {
extend: 'Ext.data.Model',
idProperty:'test',
fields: [{
name: 'test',
type: 'int'
}, {
name: 'id',
depends: ['test'],
convert: function(v, rec) {
return rec.get('test')%10;
}
}]
});
var store = Ext.create('Ext.data.Store', {
model: 'ModelName',
proxy: {
type: 'ajax',
url: 'data1.json',
reader: {
type: 'json',
rootProperty: 'data'
}
}
});
store.on('load', function() {
// Due to clashes between the calculated id,
// the store should contain four records.
console.log(store.getRange());
});
store.load();
Ext.define('ModelName1', {
extend: 'Ext.data.Model',
fields: [{
name: 'test',
type: 'int'
}, {
name: '_id',
depends: ['test'],
convert: function(v, rec) {
return rec.get('test')%10;
}
}]
});
var store1 = Ext.create('Ext.data.Store', {
model: 'ModelName1',
proxy: {
type: 'ajax',
url: 'data1.json',
reader: {
type: 'json',
rootProperty: 'data'
}
}
});
store1.on('load', function() {
// Due to clashes between the calculated id,
// the store should contain four records.
console.log(store1.getRange());
});
store1.load();
}
});