我有一个读取列表项数组的程序。它通过使用全局变量listItemTypeMap来映射相应的类型,从而转换数组并为每个项目分配一个显式的listItem类型。我决定清楚这应该使用_.map而不是我自己的循环逻辑。
然而,当代码使用map并尝试访问listItemTypeMap时,该变量现在未定义。当我使用自己的for循环时,它完全没问题。这使我相信使用underscore.js时存在某种范围问题。我对框架很新,但无论如何要在_.map对象中规避或插入全局变量?或者我是否必须重写整个班级的工作方式?
//One part of the class
var myNewArray= _.map(infoList, this.ReconcileListTypes);
//Another part of the class
MyProject.MyListManager.ReconcileListTypes = function (listItem)
{
var listItemCopy = null;
if (listItem.Value == undefined)
{ //listItemTypeMap is undefined
listItemCopy = _.extend({ "$type": this.listItemTypeMap[listItem.listItemType] }, listItem);
if (listItemCopy.listItemType == listItemType.Exception)
{
if (listItemCopy.Base != null)
{
listItemCopy.Base = _.extend({ "$type": this.listItemTypeMap[listItemCopy.Base.listItemType] }, listItemCopy.Base);
}
}
}
else
{
listItemCopy = _.extend({ "$type": this.listItemTypeMap[listItem.Value.listItemType] }, listItem.Value);
if (listItemCopy.listItemType == listItemType.Exception)
{
if (listItemCopy.Base != null)
{
listItemCopy.Base = _.extend({ "$type": this.listItemTypeMap[listItemCopy.Base.listItemType] }, listItemCopy.Base);
}
}
}
return listItemCopy;
};