动态设置字段到extjs数据存储

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)

Jua*_*des 6

这是我的想法:

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)