我正在尝试将字段动态设置为extjs数据存储,以便我可以在运行时动态创建不同的网格。
案例A 对我有用。但是当我在案例B 中使用时,商店的代理会挂起到之前的模型,因此网格渲染会混乱。
这两者之间的真正区别是什么?
案例A
Ext.define('FDG.store.reading.FDGDynamicGridStore', {
extend: 'Ext.data.Store'
});
var fdgstore = Ext.create('FDG.store.reading.FDGDynamicGridStore', {
fields: fields,
proxy: {
type: 'memory',
reader: {
type: 'json',
totalProperty: 'tc',
root: 'Result'
}
}
});
fdgstore.loadRawData(output);
this.reconfigure(fdgstore, columns);
案例B
Ext.define('FDG.store.reading.FDGDynamicGridStore', {
extend: 'Ext.data.Store',
proxy: {
type: 'memory',
reader: {
type: 'json',
totalProperty: 'tc',
root: 'Result'
}
}
});
var fdgstore = Ext.create('FDG.store.reading.FDGDynamicGridStore', {
fields: fields
});
fdgstore.loadRawData(output);
this.reconfigure(fdgstore, columns);
答案 0 :(得分:6)
以下是我的想法:
Ext.data.Model负责持有代理和字段。不鼓励在商店中设置这些属性以支持MVC,尽管这是Ext-JS MVC出现之前的唯一方法。
商店始终使用与模型对象关联的代理。将fields
属性传递给商店时,将使用默认代理创建匿名Model
。 You shouldn't use that when specifying proxies. From the doc
对于更复杂的事情,例如指定特定的id属性或关联,应该为模型配置定义和指定Ext.data.Model。
我的建议是你根据字段动态创建模型,这样你就没有任何匿名的模型伏都教。
function createModelWithCustomProxy(fields) {
return Ext.define('FDG.store.reading.Mymodel' + Ext.id(), {
extend: 'Ext.data.Model',
fields: fields,
proxy: {
type: 'memory',
reader: {
type: 'json',
totalProperty: 'tc',
root: 'Result'
}
}
}
});
var fdgstore = Ext.create('Ext.data.Store', {
model: createModelWithCustomProxy(fields);
});
fdgstore.loadRawData(output);
this.reconfigure(fdgstore, columns);