【问题标题】:dynamically set fields to a extjs data store将字段动态设置为 extjs 数据存储
【发布时间】:2014-04-14 09:01:39
【问题描述】:

我正在尝试将字段动态设置为 extjs 数据存储,以便在运行时动态创建不同的网格。

案例 A 适合我。但是当我在 案例 B 中使用 as 时,商店的代理会挂在以前的模型上,因此网格渲染会混乱。

这两者的真正区别是什么?

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

【问题讨论】:

    标签: extjs extjs4 extjs4.1 extjs4.2


    【解决方案1】:

    以下是我的想法:

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

    【讨论】:

      猜你喜欢
      • 2013-04-16
      • 2012-01-31
      • 1970-01-01
      • 1970-01-01
      • 2012-07-30
      • 2013-03-31
      • 2018-06-08
      • 1970-01-01
      • 2014-05-13
      相关资源
      最近更新 更多