2011-09-21 7 views
1

목록에있는 항목의 수를 가져 오는 함수를 작성했습니다. 카운트 할 항목이있는 목록의 기본 키 (list_pk)를 입력으로 사용합니다. 그런 다음 5의 목록 길이dojo.data.ItemFileReadStore.fetch() onComplete 처리기가 전역 변수에 액세스 할 수 없습니까?

function getListLength(list_pk){ 

    // Data store of list items 
    var store = getStore(); 

    dojo.global["length"] = -1; 

    // Get all list items that belong to the list 
    store.fetch({ 
     query: {list : list_pk}, 
     onComplete: function(items, request){ 
      dojo.global["length"] = items.length; 
      console.log("onComplete() length: " + dojo.global["length"]); 
     } 
    }); 

    console.log("after onComplete() length: " + dojo.global["length"]); 
} 

, 위의 디스플레이 ... list_pk하고이를 계산하기 위해 동일한 "목록"이 모든 목록 항목에 대한 데이터 저장소를 쿼리 :

onComplete() length: 5 
after onComplete() length: -1 

그래서 항목 수를 올바르게 계산하지만 전역 변수 "length"를 업데이트하지 못합니다. 아무도 이유를 아나요?

답변

3

올바른 동작입니다. store.fetch은 비동기 호출입니다. onComplete이 호출되면 dojo.global["length"]이 업데이트됩니다. store.fetch 이후에 전역 변수를 가져 오려고하면 onComplete이 아직 호출되지 않을 수 있으므로 여전히 초기 값을 얻습니다.

dojo.global["length"] 코드를 넣고 onComplete 기능을 사용하십시오.

관련 문제