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

dojo.publish使用することができます

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

は、 ')('新しい配列を使用しないでください、だけではなく、 '[]'の表記を使用: 'VARをitemArray = []; ' – Joe

答えて

2

completedが非同期に呼び出されるため、配列にcompleted関数のデータが移入される前に、itemArray.lengthを印刷しています。

itemArrayの実際の長さを印刷する場合は、for-loopの後にcompletedで実行する必要があります。

+0

それをどう扱うのですか? – BOSS

+0

私は私の答えを増やしました。私の答えが満足できない場合は、何をしようとしているのかをさらに詳しく説明してください。 – FishBasketGordo

+0

私は後でそれを使うことができるように、その配列に値を設定します。 – BOSS

1

こんにちは、あなたの問題への答えは非常に簡単ですが、最初のiは

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); 
}; 

を使用してrecommandだろうと、あなたはitemArrayがロードされると、プロセスに保つために使用される関数を作成します。..あなたはまた、サイドノートとして/ dojo.subscribe

関連する問題