如何在tree中添加一个 contextmenu 事件?
/** * 添加绑定事件 * <pre><code> * //绑定单个事件 * list.on('itemclick',function(ev){ * alert('21'); * }); * //绑定多个事件 * list.on('itemrendered itemupdated',function(){ * //列表项创建、更新时触发操作 * }); * </code></pre> * @param {String} eventType 事件类型 * @param {Function} fn 回调函数 */ on : function(eventType,fn){ //一次监听多个事件 var arr = eventType.split(' '), _self = this, callbacks =null; if(arr.length > 1){ BUI.each(arr,function(name){ _self.on(name,fn); }); }else{ callbacks = _self._getCallbacks(eventType); if(callbacks){ callbacks.add(fn); }else{ _self.addEvents(eventType); _self.on(eventType,fn); } } return _self; },
_getCallbacks : function(eventType){ var _self = this, eventMap = _self._eventMap; return eventMap[eventType]; },
突破口:bindUI
/** * 根据属性变化设置 UI * @ignore */ function bindUI(self) { /*var attrs = self.getAttrs(), attr, m; for (attr in attrs) { if (attrs.hasOwnProperty(attr)) { m = UI_SET + ucfirst(attr); if (self[m]) { // 自动绑定事件到对应函数 (function (attr, m) { self.on('after' + ucfirst(attr) + 'Change', function (ev) { // fix! 防止冒泡过来的 if (ev.target === self) { self[m](ev.newVal, ev); } }); })(attr, m); } } } */ }
突破口:fire
/** * 触发事件 * <pre><code> * //绑定事件 * list.on('itemclick',function(ev){ * alert('21'); * }); * //触发事件 * list.fire('itemclick'); * </code></pre> * @param {String} eventType 事件类型 * @param {Object} eventData 事件触发时传递的数据 * @return {Boolean|undefined} 如果其中一个事件处理器返回 false , 则返回 false, 否则返回最后一个事件处理器的返回值 */ fire : function(eventType,eventData){ var _self = this, callbacks = _self._getCallbacks(eventType), args = $.makeArray(arguments), result; if(!eventData){ eventData = {}; args.push(eventData); } if(!eventData.target){ eventData.target = _self; } if(callbacks){ result = callbacks.fireWith(_self,Array.prototype.slice.call(args,1)); } if(_self._isBubbles(eventType)){ var bubbleTarget = _self._bubbleTarget; if(bubbleTarget && bubbleTarget.fire){ bubbleTarget.fire(eventType,eventData); } } return result; },