我正在编写一个方法来获取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 });
}
}
答案 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 });
}
}