Javascript自定义事件更改回调参数

时间:2015-10-30 14:29:17

标签: javascript

我想编写一个自定义事件并在其回调函数

中打印到控制台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

2 个答案:

答案 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()