Вы можете просто разделить интерфейс и бэкэнд. Интерфейс размещен на сервере клиентов с API, который вызывает вызовы на сервер на вашем сервере. Это удерживает весь собственный проприетарный код и заставляет пользователей подписывать / оплачивать подписки.
Это потому, что this
в функции обратного вызова из objLoader.load
относится к функции onload, а не к экземпляру класса.
Один из способов решить эту проблему - создать экземпляр this
в переменной в функции createScene
, а затем использовать эту переменную вместо этой в функции загрузки:
createScene(elementId: string): void {
let me = this;
...
objLoader.load(
// resource URL
'helicopter.obj',
// called when resource is loaded
function ( object ) {
console.log(object);
object.position.y -= 60;
me.scene.add( object );
},
...
);
}
Другой способ будет использовать функцию стрелки, где this
будет ссылаться на класс ItemsCatalogComponent
:
objLoader.load(
// resource URL
'helicopter.obj',
// called when resource is loaded
( object ) => {
console.log(object);
object.position.y -= 60;
this.scene.add( object );
},
// called when loading is in progresses
( xhr ) => {
console.log( ( xhr.loaded / xhr.total * 100 ) + '% loaded' );
},
// called when loading has errors
( error ) => {
console.log( 'An error happened' );
}
);
Надеюсь, что поможет.