【问题标题】:Change Root of MemoryStore not working更改 MemoryStore 的根目录不起作用
【发布时间】:2016-07-04 16:59:28
【问题描述】:

可能重复:How to set url and root dynamically in extjs

您好,我有一个简单的 memoryStore。如果我试图在 Ext.Define 期间不声明它的代理,即使我确实设置了代理,我也无法在以后检索到正确的数据根。难道我做错了什么?

这是一个测试用例:

var store = Ext.create('Ext.data.Store', {
    storeId: 'JailNames',
    autoLoad: true,
    fields: [
        {
            name: 'name',
            type: 'string'
        },
    ],
    data: {
        data_regionI: [
                    {name: "Jail 1"},
                    {name: "Jail 2"},
                    {name: "Jail 3"},
        ],
        data_regionII: [
                    {name: "Jail 4"},
                    {name: "Jail 5"},
                    {name: "Jail 6"},
        ],
    },
    proxy: {
        type: 'memory',
        reader: {
            type: 'json',
            root: 'data_regionI'
        }
    }
})



  store.setProxy({
          type: 'memory',
          reader: {
              type: 'json',
              root: 'data_regionII'
          }
      } )

store.load();
store.getAt(0).raw //still returns Jail 1

查看store.getProxy().reader.root,我将 data_regionII 作为根。为什么? 提前致谢

【问题讨论】:

    标签: extjs extjs4.1


    【解决方案1】:

    如果我将您的代码复制到版本 4.1.1 的 sencha fiddle 中,它会抛出一个 Uncaught TypeError: Cannot read property 'raw' of undefined,这是我所期望的,因为在调用 load() 之后,商店根本不应该包含任何记录。

    你在理解 store 做什么和 proxy 做什么方面存在很多问题:

    • 普通商店的load 函数将告诉代理获取数据,告诉读者从中进行记录,并将其加载到商店的data 属性中,覆盖(!)您定义的数据在初始化时。
    • 但是内存存储的加载函数根本不打算做任何事情,也根本不打算使用。
    • 内存存储不能同时保存多个存储内容。 (但是,您可以将未使用的内容存储在商店 JavaScript 对象的 unused(!) 属性中)。
    • 一个store,不管是哪个proxy,都不需要autoLoad:truedata的内容加载到store中——初始化后data的内容会自动作为store的默认数据。李>

    也就是说,只需几行代码,仍然可以实现您想要的。你甚至不必创建我只是为了可读性而创建的所有函数:

    var store = Ext.create('Ext.data.Store', {
        storeId: 'JailNames',
        fields: [
            {
                name: 'name',
                type: 'string'
            },
        ],
        myData: { // custom property!
            data_regionI: [
                        {name: "Jail 1"},
                        {name: "Jail 2"},
                        {name: "Jail 3"},
            ],
            data_regionII: [
                        {name: "Jail 4"},
                        {name: "Jail 5"},
                        {name: "Jail 6"},
            ],
        },
        loadRegion1:function() {
            this.loadRegion("data_regionI");
        },
        loadRegion2:function() {
            this.loadRegion("data_regionII");
        },
        loadRegion:function(rootProperty) { // custom function for better readability
            this.loadRawData(this.myData[rootProperty]); // load data without proxy, but with reader!
        },
        proxy: {
            type: 'memory',
            reader: {
                type: 'json'
            }
        }
    });
    store.loadRegion1();
    console.log(store.getAt(0).get("name")); //returns Jail 1
    store.loadRegion2();
    console.log(store.getAt(0).get("name")); //returns Jail 4
    

    【讨论】:

    • 我明白了,谢谢你的澄清,亚历山大!我明白你的意思。为你加油!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-10
    • 1970-01-01
    • 2019-01-23
    • 2016-03-14
    • 2013-10-12
    相关资源
    最近更新 更多