2014-06-15 42 views
1

這可能是一個純JavaScript問題,但不知何故,我不能得到這個權利。我正在使用sencha架構師開發extjs4.2。我有一個從服務器發送的返回數組中存儲的字段的數據

{ 
    "data": [{ 
     "ExamID": 1, 
     "ExamName": "Semester-1", 
     "MaxMarks": 100 
    }, { 
     "ExamID": 4, 
     "ExamName": "Test-1", 
     "MaxMarks": 10 
    }, { 
     "ExamID": 5, 
     "ExamName": "Test-2", 
     "MaxMarks": 10 
    }] 
} 

JSON響應我所尋找的是僅使用「ExamName」的數據來重新配置網格。所以「ExamName」應該作爲reconfigure()函數中的數組傳遞。

我無法獲得數組形式的「ExamName」。你的幫助是高度讚賞

 var gridStore = Ext.data.StoreManager.get('ClassSemesterStore'); 

var g = gridStore.load({params : {ClassID: ClassData }}); 

var data = g.data; 

var length = data.getCount(); 

var examName = []; 
for(var i = 0; i < length; i++){ 
    examName.push(data[i]['ExamName']); 
} 

它說:「遺漏的類型錯誤:無法讀取的未定義的屬性‘ExamName’」

回答

0

Store的data在不是陣列。我認爲這是一個混合收藏。因此,無論使用以下命令:

var examName = []; 
for(var i = 0; i < length; i++){ 
    examName.push(data.items[i].data['ExamName']); 
} 

或更好的從源得到的信息,如人建議。

另一個不錯的選擇是Store's collect。 你可以做某事,如:

gridStore.collect('ExamName') 
+0

嗨adaskos我試着回答以上。然而,我收到一個錯誤 - 摘錄給出了先前選擇的記錄數組而不是當前記錄。我也試過 Store.loadData([],false); 在再次加載之前清除所有加載的存儲數據。 – user2677125

+0

您如何以及何時重新配置您的網格商店?難道是你有一個商店的早期實例的參考?您需要提供更多的代碼。 – adaskos

+0

有兩個網格並排配置不同的商店。我在第一個網格上使用了網格選擇偵聽器。 當一個網格行被選中時,它會給出一個'ClassID'。 var Grid = this.getSemGrid(); var Store = Grid。getStore(); //你的網格商店 var ClassData = record.get('ClassID'); console.log(ClassData); 此'ClassID在加載第二個商店時用作Param。 var g = Store.load({params:{ClassID:ClassData}}); 一旦商店被加載,我得到所有加載的記錄 var selected = g.data.item; 然後推送數組中所有記錄的一個字段的所有值.. – user2677125

1

我想,如果我理解正確的話,你想擁有的examName是一個新的數組它的內容是每個ExamName在你的回覆數據中?如果是這樣,這應該工作。

var data = {"data":[{"ExamID":1,"ExamName":"Semester-1","MaxMarks":100},{"ExamID":4,"ExamName":"Test-1","MaxMarks":10},{"ExamID":5,"ExamName":"Test-2","MaxMarks":10}]} 

var examName = []; 
for(var i = 0; i < data.data.length; i++){ 
    examName.push(data.data[i]['ExamName']); 
} 

現在examName與 「學期-1」 的數組 「試驗1」 和 「試驗2」

+1

或者,避免了指數型循環:'VAR examName = data.reduce(函數( acc,next){acc.push(next.ExamName); return acc},[]);' – rplantiko

+0

非常酷/有趣。這樣做(不是基於索引)的好處是什麼? –

+0

謝謝泰勒,但這並沒有得到必要的響應var g = gridStore.load({params:{ClassID:ClassData}});這是一個與加載網格相關的商店,我需要獲取整個商店的數據。一旦我得到加載的商店的數據,然後我需要得到字段'ExamID',然後把它放入數組 – user2677125

0

錯誤是因爲店裏裝的異步性:

var g = Store.load({ 
        params : {ClassID: ClassData }, 
        callback : function(records, operation, success){ 
        var Excerpt = []; // start with empty array 
        Ext.each(records, function(item) { 
         // add the fields that you want to include 
         var Obj = { 
          third_field: item.get('ExamName') 
         }; 
         Excerpt.push(Obj); // push this to the array 
        }, this); 

        console.log(Excerpt); 
        } 
}); 
相關問題