2012-02-08 74 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

相關問題