scene.add(object) создает Uncaught TypeError: невозможно прочитать свойство «длина» неопределенного

Получение этой ошибки в моей консоли javascript (в Chrome) с объектом collada, который я пытаюсь добавить с помощью базового загрузчика. Это конкретно происходит из фрагмента «scene.add(object)». Все остальное работает нормально. Код для загрузки объекта выглядит следующим образом

var ltable;
var furnLoad = new THREE.ColladaLoader();

function addlt(){
        furnLoad.load('../Models/Furniture/foldingLongTable.dae', function(collada){
                ltable = collada.scene;
                ltable.scale.x=ltable.scale.y=ltable.scale.z=1;
                ltable.updateMatrix();
                ltable.position.x=ltable.position.z=ltable.position.y=0;
        });
        scene.add( ltable );
}

Эта функция вызывается во время инициализации страницы, которая в остальном работает нормально. Эту страницу можно найти здесь (версия без этой таблицы имеет тот же URL за исключением 4 вместо 3 в конце) и конкретного объекта здесь.

Каков был бы рекомендуемый способ обойти эту ошибку?


person Community    schedule 05.12.2011    source источник
comment
Есть ли шанс, что анонимная функция, переданная в furnLoad.load, не будет вызвана? Это приведет к тому, что ltable никогда не будет установлен. Вы должны попробовать утвердить значение ltable.   -  person William Mariager    schedule 05.12.2011
comment
потенциально возможно. Я только что закомментировал сцену.add(ltable); и добавил предупреждение о том, что if(!ltable){alert(No table)}; увидеть. Предупреждение не было выдано, поэтому я предполагаю, что оно установлено правильно.   -  person    schedule 05.12.2011
comment
Тогда, боюсь, вам придется подождать кого-то, кто больше разбирается в калладе или javascript, так как я не знаю ни того, ни другого. :)   -  person William Mariager    schedule 05.12.2011


Ответы (2)


РЕШЕНО. Загрузчики Collada просто ненавидят быть частью какой-либо функции и не будут работать в них. Таким образом, исправление состоит в том, чтобы иметь их вне функций, и они работают нормально.

person Community    schedule 07.12.2011
comment
Что это значит? Вы должны запускать их в глобальной области видимости? - person msfeldstein; 25.10.2013

Ответ на этот вопрос связан с расположением scene.add() за пределами функции обратного вызова. Он вызывается до срабатывания обратного вызова, поэтому возникает неопределенная ошибка.

person Justin    schedule 15.10.2014