/** * ## [data_events](com/data_events.js) * * allows components to react to data changes * * ```html * <script> * AFRAME.registerComponent('mycom',{ * init: function(){ this.data.foo = 1 }, * event: { * foo: (e) => alert("I was updated!") * } * }) * </script> * * <a-entity mycom data_events/> * ``` * */ if( !AFRAME.components.data2event ){ AFRAME.registerComponent('data2event',{ init: function(){ setTimeout( () => { for( let i in this.el.components ){ let com = this.el.components[i] if( typeof com.data == 'object' ){ com.data = this.reactify( this.el, com.data) } } },50) }, reactify: function(el,data){ return new Proxy(data, { get(me,k,v) { return me[k] }, set(me,k,v){ me[k] = v el.emit(k,{el,k,v}) } }) }, }) }