代码之家  ›  专栏  ›  技术社区  ›  Josh Andreas Rehm

extjs:一个Ajax调用中有多个JSonStores?

  •  3
  • Josh Andreas Rehm  · 技术社区  · 15 年前

    我有一个基于extjs的应用程序。编辑对象时,会出现一个带有多个选项卡的extjs窗口。其中三个选项卡具有外部网格面板,每个都显示不同类型的数据。目前,每个gridpanel都有自己的jsonstore,这意味着总共有四个对服务器的Ajax请求——一个用于JavaScript创建窗口,另一个用于每个jsonstore。三个JSonStore都可以从一个Ajax调用中读取吗?我可以轻松地组合所有JSON数据,每个数据当前都有不同的 root 财产。

    编辑 :这是分机2.2,不是分机3。

    5 回复  |  直到 9 年前
        1
  •  3
  •   wes    15 年前

    从JSON响应创建的javascript对象在 yourStore.reader.jsonData 当商店 load 事件被激发。例如:

    yourStore.on('load', function(firstStore) {
       var data = firstStore.reader.jsonData;
       otherStore.loadData(data);
       thirdStore.loadData(data);
    }
    

    编辑: 为了澄清,每个商店都需要单独的 root 属性(您已经这样做了),这样它们就可以得到预期的数据。

    {
       "firstRoot": [...],
       "secondRoot": [...],
       "thirdRoot": [...]
    }
    
        2
  •  3
  •   David Winslow    15 年前

    您可以使用AjaxRequest直接获取JSON,然后将其传递给每个JSonStore的loadData()方法。

        3
  •  1
  •   Steve -Cutter- Blades    15 年前

    您可以使用ext.direct来完成这项工作,您可以在一个连接过程中发出多个请求。

        4
  •  0
  •   Jonathan Julian    15 年前

    也许HTTP缓存可以帮到你。结合JSON数据,确保JSonStores正在使用GET,并观察Firebug,以确保第二个和第三个请求不会发送到服务器。您可能需要在该JSON响应中设置一个远未来的Expires头,如果您希望数据经常更改,这可能是不好的。

        5
  •  0
  •   Snehal Masne    9 年前

    另一个奇妙的方法是 外部数据连接() 如下图所示:

    var conn = new Ext.data.Connection();
        conn.request({
            url: '/myserver/allInOneAjaxCall',
            method: 'POST',
            params: {
               // if you wish too
            },
            success: function(responseObj) {
                var json = Ext.decode(responseObj.responseText);
    
               yourStore1.loadData(json.dataForStore1);
               yourStore2.loadData(json.dataForStore2);            
    
            },
            failure: function(responseObj) {
                var message = Ext.decode(responseObj.responseText).message;
                alert(message);
    
            }
        });
    

    这对我很有用。