2014-02-27 53 views
0

簡單問題在這裏。我怎麼能把這個JSON字符串放到一個Ext.data.Store中?將JSON字符串放入商店

{ 
    "elements":[ 
     { 
     "element":{ 
      "name":"value 1", 
      "id":"element 1", 
      "attributes":[ 
       { 
        "attrname":"id", 
        "attrvalue":"This is the ID" 
       }, 
       { 
        "attrname":"name", 
        "attrvalue":"This is the name" 
       }, 
       { 
        "attrname":"description", 
        "attrvalue":"This is the description" 
       }, 
       { 
        "attrname":"table_name", 
        "attrvalue":"This is the table" 
       } 
      ] 
     } 
     } 
    } 

這是我的問題的簡化版本:Placing JSON response elements into a store- Ext JS

乾杯!

+1

你能否提供更多信息?這個JSON從哪裏來?商店將存儲模型實例;該商店是否會存儲多個「元素」實例?看起來每個「屬性」將是一個單獨模型的實例。你可以使用關聯。 –

+0

我的JSON來自我的服務器的請求,我把它變成一個字符串。現在我試圖將這些單獨的屬性放入商店,然後放入網格中。如果你按照我的鏈接,它會給你更多的細節 –

+0

按照這個例子:http://stackoverflow.com/questions/15522423/reader-root-in-extjs-with-nested-json-array –

回答

2

由於JSON從服務器返回,首先需要做的是將其從JSON格式的字符串反序列化爲可導航的對象。假設它是有效的JSON,你可以簡單地通過使用Ext.decode()來做到這一點。

這會給出一個對象在「元素」鍵上有一個對象數組。簡單地遍歷元素數組並創建一個新的模型實例,該實例可以插入到您的商店中。

這裏是一個活生生的例子鏈接:https://fiddle.sencha.com/#fiddle/3u6

下面是來自例子代碼:

var data = YOUR_DATA_HERE, 
var store = Ext.create('Ext.data.Store', { 
    fields: ['id', 'name', 'description', 'table_name'], 
    proxy: { 
     type: 'memory' 
    } 
}) 
Ext.create('Ext.grid.Panel', { 
    title: 'Test Data', 
    store: store, 
    columns: [{ 
     text: 'ID', 
     dataIndex: 'id' 
    }, { 
     text: 'Name', 
     dataIndex: 'name' 
    }, { 
     text: 'Description', 
     dataIndex: 'description' 
    }, { 
     text: 'Table Name', 
     dataIndex: 'table_name' 
    }], 
    renderTo: Ext.getBody() 
}); 
var decoded = Ext.decode(data); 
// loop over decoded data 
for(var i=0; i<decoded.elements.length; i++) { 
    var element = decoded.elements[ i ].element; 
    // set implicit model 
    var model = {}; 
    // loop over attributes 
    for(var x=0; x<element.attributes.length; x++) { 
     var attribute = element.attributes[ x ]; 
     model[ attribute.attrname ] = attribute.attrvalue; 
    } 
    // implicitly cast data as Model 
    store.add(model); 
} 
+0

你是先生,是個天才。這工作完美,謝謝。 –

+0

如何將elements.element.name從模型中拉出並放入它自己的列中? –

+0

Existdissolve可以提供任何提示嗎? –