返回存储在数组中的字段的数据

时间:2014-06-15 04:03:16

标签: javascript json extjs extjs4

这可能是一个纯粹的javascript的问题,但不知何故,我无法做到这一点。我正在使用sencha架构师研究extjs4.2。我有一个从服务器发送的json响应

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

我正在寻找的是使用" 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']);
}

它说&#34; Uncaught TypeError:无法读取属性&#39; ExamName&#39;未定义&#34;

3 个答案:

答案 0 :(得分: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是一个带有&#34;第三学期&#34;,&#34;测试-1&#34;和&#34;测试-2&#34;

的数组

答案 1 :(得分:0)

data存储在一个数组中。我认为这是一个混合收藏。所以要么使用以下内容:

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

或更好地从您的来源获取信息,就像建议的人一样。

另一个好的选择是Store's collect。 你可以这样做:

gridStore.collect('ExamName')

答案 2 :(得分: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);
                   }
});