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

时间:2014-03-11 00:23:11

标签: 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);

案例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);

1 个答案:

答案 0 :(得分:6)

以下是我的想法:

Ext.data.Model负责持有代理和字段。不鼓励在商店中设置这些属性以支持MVC,尽管这是Ext-JS MVC出现之前的唯一方法。

商店始终使用与模型对象关联的代理。将fields属性传递给商店时,将使用默认代理创建匿名ModelYou 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);