带有ItemFileWriteStore的store.query的Dojo范围问题

时间:2011-08-30 13:45:24

标签: dojo scope

我正在编写一个方法来获取ItemFileWriteStore中最低的唯一ID。我有一个布尔告诉我什么时候达到我的条件,但我不能让范围正确。

函数调用按照我的预期工作,除了当newIdOkay设置为true时,它在while循环中无法识别。

请你解释为什么以及为了做到这一点我必须做些什么?

非常感谢

这是我的代码:

function checkNewId( size ) {
    if( size == 0 ) {
        console.log('found new ID!');
        newIdOkay = true;
    }
 }

function addContentItem( store ) {    
    // New ID 
    var newIdOkay = false;
    var newId = 0;

    while( newIdOkay == false && newId < 8 ) {
        newId++;
        store.fetch({ query: {id:newId}, onBegin: dojo.hitch(this, "checkNewId"),                          
                      start:0, count:0, sync:true });
    }
} 

1 个答案:

答案 0 :(得分:0)

要了解原因,您需要对JavaScript中的标识符解析和范围链有基本的了解。我建议你阅读这篇文章:http://jibbering.com/faq/notes/closures/

关于你的问题,在函数addContentItem中,对着与该函数执行上下文对应的激活对象中的标识符newIdOkay测试while循环中的检查。在函数checkNewId中,您设置的标识符newIdOkay位于全局对象中。所以这两个不一样。一个简单的解决方法是将newIdOkay函数中的addContentItem移动到全局范围。

var newIdOkay = false;

function checkNewId( size ) {
    if( size == 0 ) {
        console.log('found new ID!');
        newIdOkay = true;
    }
 }

function addContentItem( store ) {    
    // New ID 

    var newId = 0;

    while( newIdOkay == false && newId < 8 ) {
        newId++;
        store.fetch({ query: {id:newId}, onBegin: dojo.hitch(this, "checkNewId"),                          
                  start:0, count:0, sync:true });
    }
}