2012-02-17 45 views
0

我想用2根在服务器端创建一个JSON字符串。我正在使用ExtJS 3.2。我想使用第一个根加载数据到网格,第二个是用不同的数据填充表单。 我在服务器端创建JSON字符串像这样;如何为ExtJS商店创建多个扎根JSON?

{ 
    metaData: { 
     "idProperty": "reportID", 
     "root": "data", 
     "successProperty": "success" 
    }, 
    "success": true, 
    "data": [ 
    { 
     "ID": 1, 
     "name": "Jon", 
     "surname": "Doe" 
    }] 
} 

假设第二名字是摘要和第二idPropertysummaryID。我如何实现这一点,我可以在哪里添加汇总数据? Thx全部。

+0

我们可以使用, '{ “成功”:真实, 中 “root1”: \t \t { \t \t “ID”:1, \t \t “名”: “乔恩”, \t \t “姓”: “Doe的” \t \t}, \t \t \t { \t \t “ID”:2, \t \t “名称”: “Jane”,请 \t \t “姓”: “Doe的” \t \t} \t \t], \t “根-2”:[ \t \t { \t \t “ID”:1, \t \t “名”: “杰克”, \t \t “姓”: “布朗” \t \t}, \t \t \t { \t \t “ID”:2, \t \t “名”: “克里斯”, \t \t “姓”: “布朗” \t \t} \t \t] }' – vtokmak 2012-02-17 22:54:03

回答

4

没有automagic,你愿意do.i在this project上有同样的问题,我想出了如何从JSON响应中自动创建多个商店。在你的网格被加载之前输入以下代码。在extjs4中,我把下面的代码在app.js这样的商店将被创建时,应用程序是initialized.The商店将被自动创建,依赖于什么JSON回报:

Ext.Ajax 
        .request({ 
         url : './account/getadminstores', 
         callback : function(options, success, response) { 
          var json = Ext.decode(response.responseText); 
          var adminStores = new Array(); 
          // setup and intitialize on the fly stores 
          for (var key1 in json) { 
           var storeFields = new Array(); 
           for (var key2 in json[key1]) {// if 
            // (i==1){break;} 
            // console.log(key2); 
            for (var key3 in json[key1][key2]) { 
             storeFields.push(key3); 
            } 
            break; 
           } 
           ; 
           Ext.define('MA.store.' + key1, { 
            extend : 'Ext.data.Store', 
            fields : storeFields, 
            storeId : key1, 
            id : 'MA.store.' + key1, 
            data : json[key1], 
           proxy: { 
            type: 'ajax', 
            url : './account/getadminstores', 
            reader: { 
             type: 'json', 
             root: key1 
            } 
           }, 
           autoLoad: true 
           }); 
           Ext.create('MA.store.' + key1); 
          } 
          ; 

创建存储你的情况是MA.store.root1MA.store.root2其中MA是你的应用程序名称空间(并且你应该将其更改为你的应用程序名称空间)。此代码用于extjs4,并且您可能需要对其进行一些修改使它在旧版本中工作。希望它有帮助。

+0

感谢您的回答。我可以使用这个,thx很多。 – vtokmak 2012-02-20 08:32:12

+0

我不能投票,因为它想要15个声望:但我接受了你的答案。 – vtokmak 2012-02-22 09:27:11

+1

谢谢。我经历了很多痛苦,才写下了这位痛苦之王。在GNU/GPl许可的情况下,您可以随时随地使用它。 – 2012-02-22 12:04:15