ssi*_*lla 4 extjs extjs4 extjs4.1 extjs4.2
我试图动态地将字段设置为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);
Run Code Online (Sandbox Code Playgroud)
案例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);
Run Code Online (Sandbox Code Playgroud)
这是我的想法:
Ext.data.Model负责持有代理和字段.不鼓励在商店中设置这些属性以支持MVC,尽管这是Ext-JS MVC出现之前的唯一方法.
商店始终使用与模型对象关联的代理.将fields属性传递给商店时,将Model使用默认代理创建匿名.指定代理时不应使用它.来自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);
Run Code Online (Sandbox Code Playgroud)