在A-Frame组件上,如何在功能之间共享数据?

时间:2017-02-15 08:59:21

标签: javascript aframe webvr

我正在创建一个A-Frame组件,我想在init等函数和其他自定义组件处理程序之间共享数据。

我想出了如何添加到组件架构以允许来自DOM的输入在此doc之后使用this.data设置变量: https://aframe.io/docs/0.4.0/core/component.html#component-prototype-properties

但是我遇到了麻烦,有时this.data的值会从DOM恢复到初始状态,而不会反映运行时修改。有没有更好的方法在组件之间共享数据?

1 个答案:

答案 0 :(得分:4)

有两种建议的方法可以在A-Frame组件中存储数据,类似于公共和私有属性。

架构(公开)

在组件架构中声明的属性是公共的,可以使用SwingUtilities.invokeLater(new Runnable() { @Override public void run() { throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } }); 进行设置,并使用setAttributegetAttribute进行访问。 注意:直接修改this.data.____ 是安全的,因为A-Frame会在从DOM接收更新时覆盖数据。

HTML:

this.data

JS:

<a-entity foo="bar: 10"></a-entity>

属性(私有)

对于要在组件中使用的数据,您还可以将它们直接分配给AFRAME.registerComponent('foo', { schema: { bar: {default: 25} }, init: function () { console.log(this.data.bar); // 10 this.data.bar = 5; // THIS CHANGE MAY BE LOST. }, doStuff: function () { console.log(this.data.bar); // 10 this.el.setAttribute('bar', 'foo', 15); console.log(this.data.bar); // 15 } }); 。当数据仅在组件中使用时,这是最佳选择,不需要在HTML中声明。

JS:

this