【问题标题】:How to get store object from existing store object in ExtJs如何从 ExtJs 中的现有商店对象中获取商店对象
【发布时间】:2013-05-01 11:15:18
【问题描述】:

我正在使用 ExjJs 4.2。我有两个显示不同数据的网格。在一个 javascript 文件中,我必须包含两个网格。我正在为第一个网格加载商店,例如

var store = Ext.create('Ext.data.Store', {
                model: 'Writer.Person',
                autoLoad: true,
                proxy: {
                    type: 'ajax',            
                    url : 'findPatientRecordAction',
                    reader: {
                        type: 'json',
                        successProperty: 'success',
                        root: 'data',
                        messageProperty: 'message'
                    },
                    writer: {
                        type: 'json',
                        encode: true,
                        root: 'data'
                    },
                    fields: ['id','notes', 'startDate', 'endDate'],
                },
            });

JSON 对象存储如下所示:

"data":[{"id":35,"notes":"hiii","startDate":"2013-04-30","endDate":"2013-05-02"}]} , "详细信息":[{"id":14,"document":"docpath12345","date":"2013-04-28"}]

实际上,第一个网格将仅显示 JSON 的“数据”部分,第二个网格将显示 JSON 的“详细信息”部分。所以理想情况下,我不应该再次为第二个网格加载存储对象(我现在正在做的事情)。我想再声明一个存储类型变量并重用“存储”的值(存储的“文档”部分)成为将第二个网格存储为

我现在正在像这样加载第二家商店

var store2 = Ext.create('Ext.data.Store', {

                model: 'Writer.Document',
                autoLoad: true,
                proxy: {
                    type: 'ajax',            
                    url : 'findPatientRecordAction',
                    reader: {
                        type: 'json',
                        successProperty: 'success',
                        root: 'details',
                        messageProperty: 'message'
                    },
                    writer: {
                        type: 'json',
                        encode: true,
                        root: 'details'
                    },
                    fields: ['id','document', 'date'],
                },
            });`.

在这两种情况下,我都调用相同的操作并获得相同的 JSON。

谁能帮我看看如何声明另一个存储对象并从现有的“存储”中获取值,这样我就不必加载相同的数据两次。

问候:开发

【问题讨论】:

    标签: extjs extjs4.1 extjs4.2


    【解决方案1】:

    您可以将第一个商店的自动加载设置为 false。然后在第二个存储中使用 load 事件将记录注入到存储活动代理数据的第一个使用中:

    var store2 = Ext.create('Ext.data.Store', {
        model: 'Writer.Document',
        autoLoad: true,
        proxy: {
            type: 'ajax',            
            url : 'findPatientRecordAction',
            reader: {
                type: 'json',
                successProperty: 'success',
                root: 'details',
                messageProperty: 'message'
            },
            writer: {
                type: 'json',
                encode: true,
                root: 'details'
            },
            fields: ['id','document', 'date'],
        },
        listeners: {
            load: function(store, records, successful, eOpts){
                if(successful)
                {
                    store1.loadData(store.proxy.reader.rawData.data);
                }
            }
        }
    });
    

    【讨论】:

    • 2fast4me ;) 无论如何,这就是答案 +1
    【解决方案2】:

    我会替换:

    listeners: {
        load: function(store, records, successful, eOpts){
            if(successful)
            {
                store1.loadData(**store.getRange()**);
            }
        }
    }
    

    我认为是一样的:

    store.proxy.reader.rawData.data store.getRange()

    【讨论】:

    • 不一样...这将使两家商店拥有相同的数据集。
    • 是的,对不起,我没有读到他只想要一小部分数据。这是我的错-
    猜你喜欢
    • 1970-01-01
    • 2017-02-24
    • 1970-01-01
    • 2020-02-29
    • 1970-01-01
    • 2017-03-03
    • 2020-08-18
    • 2012-12-21
    • 1970-01-01
    相关资源
    最近更新 更多