2011-01-25 65 views
0

我一直在Stack Overflow上潛伏了很長一段時間,並且發現了相當多的非常有用的答案。非常感謝社區!我希望能夠在太久之前提供我自己有用的答案。Sencha Touch - 通過嵌套循環訪問相關模型商店JSON

與此同時,我還有另一個問題,我不明白。我正在使用Sencha Touch創建基於Web的電話應用程序,並且無法使用嵌套循環遍歷某些JSON。我可以獲取第一級數據,但不能嵌套在第一級數據中。有一些related ExtJS thread,但我決定創建自己的ExtJS和觸摸分歧以微妙而重要的方式。無論如何,這裏是一些代碼,以顯示我在哪裏:

JSON(截斷 - JSON是PHP/MYSQL生成的,目前實際上有三個子級別的「標題」,所有我可以訪問。子級 「項目」,通過它,我不能重複):

{ 
"lists": [ 
    { 
     "title": "Groceries", 
     "id": "1", 
     "items": [ 
      { 
       "text": "contact solution - COUPON", 
       "listId": "1", 
       "id": "4", 
       "leaf": "true" 
      }, 
      { 
       "text": "Falafel (bulk)", 
       "listId": "1", 
       "id": "161", 
       "leaf": "true" 
      }, 
      { 
       "text": "brita filters", 
       "listId": "1", 
       "id": "166", 
       "leaf": "true" 
      } 
     ] 
    } 
] 

}

商店:

var storeItms = new Ext.data.Store({ 
    model: 'Lists', 
    proxy: { 
     type: 'ajax', 
     method: 'post', 
     url : LIST_SRC, 
     extraParams: {action: 'gtLstItms'}, 
     reader: { 
      type: 'json', 
      root: 'lists' 
     } 
    } 
}); 

工作循環:

storeItms.on('load', function(){ 
    var lstArr = new Array(); 
    storeItms.each(function(i) { 
     var title = i.data.title; 
     lstArr.push(i.data.title); 
    }); 
    console.log(lstArr); 
}); 

非工作嵌套循環:

storeItms.on('load', function(){ 
    var lstArr = new Array(); 
    storeItms.each(function(i) { 
     var title = i.data.title; 
     var id = i.data.id; 
     title.items.each(function(l) { 
      lstArr.push(l.data.text); 
     }); 
    }); 
    console.log(lstArr); 
}); 

非工作嵌套循環給我的錯誤「無法調用‘每個’未定義」,在提及「title.items.each。 ..'

我懷疑這是因爲我沒有設置標題爲設置鍵:值對的關鍵,所以它只是看到一個字符串列表...但我有點兒在失利。

我應該提到商店通過兩個已經彼此關聯的模型進行填充。我知道Store可以訪問所有內容,因爲我可以通過XTemplate進行嵌套迭代。

任何幫助將不勝感激,並希望在太久之前返回到社區實物!

-Eric

回答

0

Eric,爲什麼是循環?

如果您的模型以與JSON嵌套相同的方式進行關聯,那麼您應該可以在商店中設置autoLoad:true,坐下來欣賞。

無論如何,您所需要這些陣列的一些其他原因無關的假設,問題是,你在

i.data.title.items 

當然,你應該嘗試迭代通過。每個

i.data.items 

此外,如果對象是模型,則可以使用.get()代替數據對象:

var title = i.get('title); 
+0

謝謝你的回覆,詹姆斯!完整的數據結構包含各種列表(雜貨,待辦事項等)以及與每個列表相關的項目。我不能簡單地遍歷整個集合中的所有項目;相反,我需要迭代列表,並且在每次列表迭代期間,我需要遍歷列表的項目。 – Eric 2011-01-29 04:57:30

0

使用新的sencha touch 2框架,您可以在模型中創建關聯,就像您的json返回一樣。 檢查Sencha Touch 2 Model Document它告訴你模型上的各種配置選項。 你可以參考這個ST2 Nested List的例子。

希望這會有所幫助。

0

「title」不是一個可枚舉的對象,它是一個字符串。要迭代一個字符串,您需要將其拆分以將其轉換爲數組。

此外,而不是使用Ext.each嘗試一個簡單的(var x obj){}或for(var xc in obj.prop){}如果這樣工作,那麼ext.each方法應該可以工作,但如果ext不能迭代對象,它會悄然失敗。