Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ExtJS存储-仅加载JSON一次_Javascript_Json_Extjs - Fatal编程技术网

Javascript ExtJS存储-仅加载JSON一次

Javascript ExtJS存储-仅加载JSON一次,javascript,json,extjs,Javascript,Json,Extjs,我有多个存储需要相同的JSON文件和不同的rootProperty。是否有可能加载一次json文件并用它填充所有存储?到目前为止,三个具有三个不同rootProperties的存储区会导致对服务器的三次调用,以获取一个可能大小为兆字节的JSON文件,该文件包含数据,并且会为每个请求反复生成 json看起来像: {"users":[{"id":0,"name":"John Doe",...},...], "threads":[{"id":0,"startedBy":0,"lastPost":0,

我有多个存储需要相同的JSON文件和不同的rootProperty。是否有可能加载一次json文件并用它填充所有存储?到目前为止,三个具有三个不同rootProperties的存储区会导致对服务器的三次调用,以获取一个可能大小为兆字节的JSON文件,该文件包含数据,并且会为每个请求反复生成

json看起来像:

{"users":[{"id":0,"name":"John Doe",...},...],
 "threads":[{"id":0,"startedBy":0,"lastPost":0,...},...],
 "posts":[...]}
这三家商店都非常相似,例如:

store: {
    model: 'Forum.model.Post',
    autoLoad: true,
    proxy:{
        type: 'ajax'
        url: '../api/json.php'
        reader: {
            type:'json'
            rootProperty:'posts'
        }
    }
}

您可以使用内存代理配置存储:

store: {
    model: 'Forum.model.Post',
    proxy:{
        type: 'memory'
        reader: {
            type: 'json'
            root: 'posts'
        }
    }
}
然后使用获取数据一次,并使用代理将其加载到每个存储中:

Ext.Ajax.request({
    url: '../api/json.php',
    success: function(response) {
        var result = Ext.JSON.decode(response.responseText);

        store.getProxy().data = result;
        store.load();
        // same procedure for the other stores...
    }
});

您可以使用内存代理配置存储:

store: {
    model: 'Forum.model.Post',
    proxy:{
        type: 'memory'
        reader: {
            type: 'json'
            root: 'posts'
        }
    }
}
然后使用获取数据一次,并使用代理将其加载到每个存储中:

Ext.Ajax.request({
    url: '../api/json.php',
    success: function(response) {
        var result = Ext.JSON.decode(response.responseText);

        store.getProxy().data = result;
        store.load();
        // same procedure for the other stores...
    }
});
(基本上是埃文所说的)在你的商店里设置“自动加载:错误”。在控制器中,手动执行Ext.Ajax.request以获取大型JSON对象。对于每个存储,手动调用store.loadRawData()并将该JSON对象作为第一个参数传递

与仅使用内存代理相比,这种方法有一个优势:一旦您加载了数据,您的每个存储将继续通过其代理与服务器通信。

(基本上是Evan所说的)在您的存储上设置“autoLoad:false”。在控制器中,手动执行Ext.Ajax.request以获取大型JSON对象。对于每个存储,手动调用store.loadRawData()并将该JSON对象作为第一个参数传递


与仅使用内存代理相比,这种方法有一个优势:加载数据后,每个存储将继续通过其代理与服务器通信。

执行手动Ajax请求,然后使用适当的位填充每个存储。执行手动Ajax请求,然后使用适当的位填充每个存储所以如果我加载rawdata,它是干净的?或者它是setDirty,所以如果我进行同步,所有内容都会发回服务器?我不清楚,但基于过去做过类似的事情,我希望它是干净的。您只是以不同的方式加载数据,但它仍在通过您配置的代理。我刚刚测试过,在使用loadRawData时,它是干净的。谢谢。还必须决定将哪个答案标记为已接受…:我希望你能很快选择接受哪一个!那么如果我加载rawdata,它是干净的?或者它是setDirty,所以如果我进行同步,所有内容都会发回服务器?我不清楚,但基于过去做过类似的事情,我希望它是干净的。您只是以不同的方式加载数据,但它仍在通过您配置的代理。我刚刚测试过,在使用loadRawData时,它是干净的。谢谢。还必须决定将哪个答案标记为已接受…:我希望你能很快选择接受哪一个!