如何设置事件响应的优先级?

如题,是否有类似addListener(eventName, eventCallback, priority)这样的方式能设置事件回调的优先级。
使得用户能够设置回调的先后顺序。

目前没有办法哦

  • 首先,祝贺你们2.0正式发布。
  • 代码提示好像有个DragEvent,但没找到实际所在处,也就用不上了。
  • 优先级是因为开发拖放系统,多个拖放区叠在一起,不知道如何让最上面的最优先响应拖放操作,因为不熟悉在节点树中自定义事件
  • 于是就开发了个拖放系统,里面有关于优先级的操作,发代码于此,望指教:
/**
 * 拖放管理器
 */
var DragAndDropManager = cc.Class({
    extends: cc.Component,

    properties: {
    },

    statics: {
        Singleton: null,
    },

    // LIFE-CYCLE CALLBACKS:

    onLoad() {
        if (!DragAndDropManager.Singleton)
            DragAndDropManager.Singleton = this;
        else
            this.destroy();
        // 创建监听器组
        this._dragListeners = {
        };
        this._dragListeners[DragAndDropManager.EventType.DRAG_START] = [];
        this._dragListeners[DragAndDropManager.EventType.DRAG_MOVE] = [];
        this._dragListeners[DragAndDropManager.EventType.DRAG_END] = [];
    },
    /**
     * 
     * @param {*} dragType 
     * @param {*} callback 
     * @param {*} priority 
     */
    addDragAndDropListener(dragType, callback, priority){
        // 获取对应的监听器组
        var _listeners = this._dragListeners[dragType];
        if (_listeners) {
            var exists = false;
            _listeners.some(e=>{
                if (e.callback === callback && e.priority === priority) {
                    exists = true;
                    return true;
                }
            });
            // 不重复添加
            if (exists === true)
                return;
            _listeners.push({callback:callback, priority:priority});
            //
            _listeners.sort(this._sortListener);
        }
    },
    /**
     * 
     * @param {*} dragType 
     * @param {*} callback 
     * @param {*} priority 
     */
    removeDragAndDropListener(dragType, callback, priority){
        var _listeners = this._dragListeners[dragType];
        if (_listeners) {
            _listeners.some((e, i) => {
                if (e.callback === callback && e.priority === priority) {
                    _listeners.splice(i, 1);
                    return true;
                }
            });
        }
    },
    /**
     * 发送拖拽事件
     * @param {cc.Node} dragTarget 
     */
    emitDrag(dragType, dragTarget, touchLocation){
        var dragEvent = {
            type: dragType,
            target: dragTarget,
            location: touchLocation,
            stop: false,
        };
        var _listeners = this._dragListeners[dragType];
        if (_listeners) {
            for (var i = 0; i < _listeners.length; ++i) {
                _listeners[i].callback(dragEvent);
                // 是否上一个处理终止事件继续传递
                if(dragEvent.stop === true)
                    break;
            }
        }
    },
    _sortListener(a, b) {
        return a.priority - b.priority;
    },
});

DragAndDropManager.EventType = {
    DRAG_START: 'dragStart',
    DRAG_MOVE: 'dragMove',
    DRAG_END: 'dragEnd',
};

module.exports = DragAndDropManager;

以后会有吗,感觉是个很实用的功能