1

我的 Three.js Json-Loader 有问题。我有一些对象,它们的路径保存在一个数组中。现在我想加载它们并将它们排序在一个列表中,以便我可以选择它们。但是加载它们的顺序与加载后它们在我的数组中的顺序不同,因为它们的大小不同,所以小的在第一个,大的在最后。所以加载它们后,我不知道对象的名称(名称是路径)。
我的代码:

for(var j=0;j<21;j++){
        var path = objPath[j];
        loader.load( path, function( geometry ) { save(geometry, path); } );
    }


使用此代码,将路径提供给保存方法,但始终存在最后一个 (objPath[20]) 路径,因为 for 循环比加载方法快。我该怎么做才能使路径正确?

4

1 回答 1

0

您被涉及 JavaScript 闭包规则的一个相当常见的错误所困扰,请参阅此链接。简而言之,要获取传递给保存函数的正确路径,需要将其包装到辅助函数工厂中,如下所示:(或如上面的链接所示)

function saveHelper(path) {
    return function(geometry) {
        save(geometry, path);
    }
}

for(var j=0;j<21;j++){
    var path = objPath[j];
    loader.load( path, saveHelper(path) );
}
于 2012-10-15T13:54:19.117 回答