2012-02-08 75 views
0
if (typeof response == "object") { 
    store = new dojo.data.ItemFileReadStore({ 
     data : response 
    }); 
    console.warn("Loaded to Store"); 
    var itemArray = new Array(); 
    var completed = function(items) { 
     for(var i = 0; i < items.length; i++) { 
      console.log(store.getValue(items[i],"itemlabel")); 
      itemArray.push(store.getValue(items[i])); 
     } 
    }; 
    var error = function() { 
     console.log("Error in fetching data from Store"); 
    }; 

    store.fetch({onComplete: completed, onError: error}); 
    console.warn("Item count"+ itemArray.length); 

所以我的项目计数给出始终为0,但为什么我无法填充我的Array对象?

console.log(store.getValue(items[i],"itemlabel")); 

在回调方法上得到打印的价值。

所以,如果我想填充我的itemArray我该怎么办?

+2

作为一个侧面说明,你不应该使用'新的Array()',而不是仅仅使用'[]'符号:'VAR itemArray = [];' – Joe 2012-02-08 13:26:58

回答

2

因为completed将被异步调用,所以在数组填充completed函数中的任何数据之前,您正在打印itemArray.length

如果要打印itemArray的实际长度,应在completed的for循环之后执行。

+0

那么如何处理呢? – BOSS 2012-02-08 13:33:19

+0

我增加了我的答案。如果我的回答不令人满意,请提供更多背景信息,以说明您正在尝试做什么。 – FishBasketGordo 2012-02-08 13:34:29

+0

我希望该数组被填充,以便稍后可以使用它。 – BOSS 2012-02-08 13:35:05

1

您好回答您的问题是很容易的,但首先我会使用推荐

var completed = function(items) { 
    dojo.forEach(items, function(item) { 
     console.log(store.getValue(items[i],"itemlabel")); 
     itemArray.push(store.getValue(items[i])); 
    }, this); 
    proceedToNextStep(itemArray); 
}; 

,然后创建将用于保持对过程一旦itemArray加载功能..

proceedToNextStep: function(itemArray){ 
    // whatever you need to do 
}, 

您也可以使用dojo.publish/dojo.subscribe

相关问题