Javascript CustomEvent详细信息在点火时是否为空?

时间:2017-06-27 04:27:28

标签: javascript javascript-events event-handling custom-events custom-event

自从几天前的最后一个问题以来,我已经取得了一些进展,但我在Javascript和Three.js上仍然很新,并且遇到了这个新问题。

我试图传递从OBJ文件加载的一些three.js几何体作为与自定义事件关联的细节,以便我可以进一步处理它。当OBJLoader以异步方式运行时,这样做是有道理的:



function loadObjAsMesh( obj ) {  // Obj Resource URL: Example: 'assets/monster.obj'

	var geometry;
	var mesh;

	loader = new THREE.OBJLoader();
			
	console.log('About to call loader.load');		
			
	loader.load(
		obj , function ( object ) { 
		
			console.log('Starting to run loader.load CALLBACK');
			
			geometry = new THREE.Geometry().fromBufferGeometry( object.children["0"].geometry );
						
			mesh = new THREE.Mesh ( geometry, sceneEntities.materials.bluePhongSolid ); 
			
			console.log( mesh );
			
			scene.add( mesh ); 
			
			console.log ( 'About to dispatch the Finished Loading Event' );
			
			dispatchEvent( sceneSyntheticEvents.objectFinishedLoading, { 
				detail : { 
					passedMesh : mesh 
						}
					}					
				);
			
			console.log ( 'Just Dispatched the Finished Loading Event' );
			console.log ( sceneSyntheticEvents.objectFinishedLoading );
			
			console.log('Done running loader.load CALLBACK');		
		
			}	);
	
	console.log('Done calling loader.load');
}




然后,这里是eventlistener:



function events() {
	
	sceneSyntheticEvents.objectFinishedLoading = new CustomEvent('objectFinishedLoading');
	
	console.log ( 'About to catch the Finshed Loading Event' );
	
	addEventListener('objectFinishedLoading', function (e) { console.log ( e.detail.passedMesh ); }, false);
	
	console.log ( 'Just Caught the Finished Loading Event' );
}




该活动成功解雇并听取了#39;由听众。问题是event.detail为null。我尝试过几种不同的方式格式化细节 - 没有骰子,所以我很确定它不是语法或惯例的问题。

我可以看到应用程序中有大量的仪器,而且清楚地表明,一旦事件发生,问题就会发生。听众并没有得到e.detail。不知怎的,在它发射的瞬间,细节根本没有包含在事件中。

我甚至尝试用几种不同的方式测试整数,认为问题是网格。我试过这个例子:



			dispatchEvent( sceneSyntheticEvents.objectFinishedLoading, { 
				detail : { 
					passedMesh : "32" 
						}
					}




和...



			dispatchEvent( sceneSyntheticEvents.objectFinishedLoading, { 
				detail :  "32" 
					}




即使这样,控制台也会报告:



CustomEvent {isTrusted: false, detail: null, type: "objectFinishedLoading", target: Window, currentTarget: Window…}




详细信息:null? "细节"在引号中,而不是引号,没有差异。

我清楚地知道这一点。有什么想法吗?

感谢。

1 个答案:

答案 0 :(得分:3)

dispatchEvent方法只使用一个参数event object

您需要将detail对象传递给事件构造函数。在您的情况下,您将事件选项作为第二个参数传递给dispatchEvent,这不会产生任何影响。

addEventListener('my-custom-event', function(e) {
  console.log('event handler', e.type);
  console.log(e.detail)
}, false);

var event = new CustomEvent('my-custom-event', {
  detail: {
    key: 'detail-value'
  }
})
dispatchEvent(event);

相关问题