2014-02-26 22 views
0

我在想什麼最好的方法是將JSON響應的元素加載到商店中。將JSON響應元素放入存儲中 - Ext JS

我有什麼:

jQuery的Ajax請求

var foodRequest = $.ajax({ 
    url: "MyServlet", 
    type: "post", 
    cache: false, 
    dataType: "json", 
    data: JSON.stringify(searchquery), 
    error : function() { 
     alert ('ERROR!! Please re-enter the search criteria and try again.'); 
       } 
}); 

Ajax響應

{ 
"Foods":[ 
    { 
    "Food":{ 
     "name":"Spaghetti", 
     "id":"001", 
     "attributes":[ 
      { 
       "attrname":"Price", 
       "attrvalue":"18.99" 
      }, 
      { 
       "attrname":"Description", 
       "attrvalue":"Spaghetti is delicious, don't argue with me" 
      }, 
      etc... 

我想要什麼:

(每個元素都有4屬性)

var grid = Ext.define('Myapp.view.Grid' ,{ 
    extend: 'Ext.grid.Panel', 
    id: 'mygrid',', 
    initComponent: function(columns) { 

     this.columns = [ 
      {header: 'attrname', dataIndex: 'attrvalue', flex: 2 }, 
      {header: 'attrname', dataIndex: 'attrvalue', flex: 2 }, 
      {header: 'attrname', dataIndex: 'attrvalue', flex: 2 }, 
      {header: 'attrname', dataIndex: 'attrvalue', flex: 2 }, 
      etc... 

如何從json響應中獲取屬性並將它們放入我的網格可以使用的商店中,如上所示?

乾杯!

+0

是你的問題問如何分析數據?或者只是如何調用函數來加載它? –

+0

數據是否需要解析?對不起,我是新來的。我只是想將所有這些數據加載到商店中,並將每個屬性顯示在其各自的字段中。 o_o –

+0

你是什麼意思「加載所有數據」?這是一個東西的表格。你想在網格中顯示什麼?數據結構沒有多大意義。 –

回答

1

您要返回的數據看起來像一棵樹。普通網格適用於固定列。總之:

  • 網格使用存儲
  • 的存儲使用多個字段或模型。
  • 網格有許多預定義的列,每列通過dataIndex引用一個商店(模型)字段。

現在,當商店加載數據(通過代理或通過手動轉儲記錄)。它會在內部創建一條記錄。記錄中可用的字段是您在商店中定義的字段或您在商店使用的模型上定義的字段。長話短說,網格和商店的正常設置是固定數量的列和字段。在你的情況下,使用TreePanel和商店可能會更好。看看這個樹的例子。

http://docs.sencha.com/extjs/4.0.7/extjs-build/examples/tree/treegrid.html

好運

+0

我很欣賞反饋,但是我想要做的就是你最初說 - 將我的響應數據加載到商店中。也許我奇怪地提出了這個問題。 –

+1

嗨粘土,然後你必須確保你的回報數據是'平'。如果你返回一個帶有3個字段的對象:{success:true,total:NR_OF_RECORDS,records:[{key:value,key2:value2}],它應該沒有問題。您的數據嵌套爲樹狀(食物 - >食物 - >屬性)。當然總有辦法讓它讀取你的數據,但是你必須創建一個自定義的渲染器。爲了能夠提供一個例子,我需要知道你的商店如何看起來像 –

+0

非常感謝你,羅布,我已經解決了我的問題,在這篇文章中的另一位用戶的幫助http://stackoverflow.com/questions/22056939 /放置-JSON串 - 進入 - 一個店內/ 22058112?noredirect = 1#22058112 –