我正在商店配置中直接设置我的字段。
Ext.define('T.store.Users', {
extend: 'Ext.data.Store',
autoLoad: false,
fields: [
{ name: 'Id', type: 'int' },
{ name: 'Name', type: 'string' }
]
});
是否可以在商店中直接为这些字段设置idProperty?我看到的唯一选择是创建一个包含idProperty的单独模型类。但我想避免这种情况。
答案 0 :(得分:14)
默认ID属性为id
。您可以在模型或代理的阅读器上更改它。
注意:商店可以使用模型的代理(本例中未完成)。
示例(两者都有)
// Set up a model to use in our Store
Ext.define('User', {
extend: 'Ext.data.Model',
idProperty: 'Id',
fields: [
{name: 'firstName', type: 'string'},
{name: 'lastName', type: 'string'},
{name: 'age', type: 'int'},
{name: 'eyeColor', type: 'string'}
]
});
var myStore = Ext.create('Ext.data.Store', {
model: 'User',
proxy: {
type: 'ajax',
url: '/users.json',
reader: {
type: 'json',
root: 'users',
idProperty: 'Id'
}
},
autoLoad: true
});
答案 1 :(得分:5)
理论上,您可以通过这种方式在构造函数中更改idProperty
:
Ext.define('T.store.Users', {
extend: 'Ext.data.Store',
autoLoad: false,
constructor: function(){
this.callParent(arguments);
this.model.prototype.idProperty = 'Id';
},
fields: [
{ name: 'Id', type: 'int' },
{ name: 'Name', type: 'string' }
]
});
答案 2 :(得分:1)
对于ExtJS 6
Ext.define(null, {
override: 'Ext.data.ProxyStore',
/**
* @cfg {String} idProperty
*/
// idProperty: null,
privates: {
createImplicitModel: function(fields) {
var me = this,
modelCfg = {
extend: me.implicitModel,
statics: {
defaultProxy: 'memory'
}
},
proxy, model;
if (fields) {
modelCfg.fields = fields;
}
// add
if(me.idProperty) {
modelCfg.idProperty = me.idProperty;
}
model = Ext.define(null, modelCfg);
me.setModel(model);
proxy = me.getProxy();
if (proxy) {
model.setProxy(proxy);
} else {
me.setProxy(model.getProxy());
}
}
}
});
示例
Ext.define('T.store.Users', {
extend: 'Ext.data.Store',
autoLoad: false,
idProperty: 'Id',
fields: [
{ name: 'Id', type: 'int' },
{ name: 'Name', type: 'string' }
]
});
测试
var store = Ext.create('T.store.Users');
console.log(store.model.idProperty); // "Id"
console.log(store.model.idField); // constructor {name: "Id", type: "int"..}
store.add({Id: '11', Name: 'XXX'})