Компонент Aframe с зависимостями от компонента с несколькими значениями true - PullRequest
0 голосов
/ 27 декабря 2018

Я пишу пользовательский компонент, который хотел бы определить зависимости других компонентов.

Зависимости - это разные типы анимации.Допустим, у них есть имена «animation__x» и «animation__y» x и y могут быть любым именем, поэтому я ищу что-то вроде анимации __ * или / animation __ \ s * /

Единственный способ, которым я сделал этоВ настоящий момент я работаю над тем, чтобы мой компонент был помещен после компонентов анимации в HTML, или, наоборот, принудительно обновлял компоненты, используя this.el.updateComponents ()

Ни одно из этих решений не подходит мне.

AFRAME.registerComponent('cool-component', {
    dependencies: ['animation'],
    update: functions(data){
       //detect available animations and do some stuff with them
       let animations = Object.keys(components).filter((key) => {
           return /(^animation__\w*)/.test(key);
       });
       //animations results in an empty array
    }
});

html, который не работает

<a-scene cool-component animation__x="" animation__y="" animation__z=""></a-scene>

html, который работает (но это не хорошо, поскольку я не могу гарантировать, что мой компонент всегда последний в списке

<a-scene animation__x="" animation__y="" animation__z="" cool-component></a-scene>

js, который работает, но не чувствует, что пишет, поскольку я использую внутренние функции сущностей

AFRAME.registerComponent('cool-component', {
    dependencies: ['animation'],
    update: functions(data){
       this.el.updateComponents(); //<-- I DONT LIKE THIS BUT IT WORKS
       //detect available animations and do some stuff with them
       //now all animations are available as this.el.components
       let animations = Object.keys(components).filter((key) => {
           return /(^animation__\w*)/.test(key);
       });
    }
});

1 Ответ

0 голосов
/ 27 декабря 2018

Три варианта:

Зависит от названий конкретных компонентов: dependencies: ['animation__xxx']

Сделать cool-component установить анимацию:

AFRAME.registerComponent('cool-component', {
    init: functions(data){
       this.el.setAttribute('animation__xxx', {...});
    }
});

Вы также можете отложить cool-component логика до загрузки объекта и инициализации всех компонентов:

init: function () {
  this.el.addEvenListener(‘loaded’, this.doStuffAferComponentsLoad.bind(this));
}

Более подробные сведения о том, что cool-component пытается выполнить, помогут получить более точный ответ.

...