dojo.data.ItemFileReadStore.fetch()onComplete处理程序无法访问全局变量?

时间:2011-09-21 05:39:22

标签: javascript dojo

我写了一个函数来获取列表中的项目数。它将列表的主键(list_pk)作为输入,我们想要计算它们的项目。然后,它会在数据存储中查询“list”等于list_pk的所有列表项,并对它们进行计数......

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

如果列表长度为5,则上面显示:

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

因此它正确计算了项目数,但无法更新全局变量“length”。有谁知道为什么?

1 个答案:

答案 0 :(得分:3)

这是正确的行为。 store.fetch是异步调用。调用onComplete后,dojo.global["length"]将会更新。如果您尝试在store.fetch之后获取全局变量,则可能尚未调用onComplete,因此您仍然可以获得初始值。

只需将代码放在dojo.global["length"]函数内使用onComplete