我想编写一个自定义事件并在其回调函数
中打印到控制台obj.name但我收到错误,需要将obj名称作为obj.detail.context.name
我如何解决它并使用obj.name行代码而不是obj.detail.context.name
进行打印目前回调中obj的结构是:
obj
自定义事件 { isTrusted:false } 气泡:假 cancelBubble:false 可取消的:假的 currentTarget:WindowdefaultPrevented:false 细节:对象 eventPhase:2isTrusted:falseisTrusted:falsepath:Array [1] returnValue:truesrcElement:Windowtarget:WindowtimeStamp:1446215160435type:“eat:done” proto :CustomEvent
答案 0 :(得分:2)
您可以使用自定义属性扩充event object
(将其与lodash合并或自行完成)。以下示例可能会为您提供一些见解;
// define the event
var event = new CustomEvent('test');
// add your custom arguments
event.customAttr = 'foo';
//the listener
window.addEventListener('test', function (e) {console.log(e)});
// fire it
window.dispatchEvent(event);
// logs: CustomEvent {isTrusted: false, customAttr: "foo"}
答案 1 :(得分:1)
注册自定义事件时,触发时返回的值为CustomEvent类型。
这种混淆在你的命名中也很明显。而不是:
MyEventsManager.on('eat:done', function(event){});
你真的得到了:
function EventsManager(){
var callbacks = {};
return {
on: function(eventName, callback, context){
if(callbacks[eventName])
callbacks[eventName].push(callback.bind(context));
else
callbacks[eventName] = [callback.bind(context)];
},
trigger: function(eventName, data){
for(var i=0; callbacks[eventName] && i < callbacks[eventName].length; i++)
callbacks[eventName][i](data);
}
}
}
如果您想使用CostumEvents,这是唯一的方法(您不能在不使用CustomEvent对象的情况下使用自定义事件)。
也许你正在寻找更简单的东西,比如回调经理:
getVerticalPosition()