日期:2014-05-16  浏览次数:20646 次

求解一个 JS如何自定义事件的问题
举个栗子,
easyui 的 控件 datagrid 
 
$("#element1").datagrid("load")  假设这样的一个控件
datagrid 他是怎么定义 的 我前面只需要定义 我的元素 然后调用他控件,再调用对应的()里面的方法就好, 如果 load 方法有参数又该如何传过去? 这样的方式应该如何去定义?

我想写个 简单的小控件 ,学习下如何把我写的小控件绑定给指定的控件来使用,求大家帮忙下,谢谢了哈



------解决方案--------------------
说白了就是jquery插件写法,你可上网查一下。
------解决方案--------------------
从头自定义事件很复杂的,但使用框架就比较简单。jquery 和mootools都有很好的自定义事件机制。
如果你要自定义事件,第一件事就是要将原来的事件按一定的api去封装起来,然后才能在这个api基础上加上你的自定义事件,事实上也就是基于基础事件的伪事件,但都通过统一的api去调用,使用上就象是定义了一个新事件。
------解决方案--------------------

$.fn.youName = (function(){
    function selfEvent(el,event,callback){
        this.event = {};
        selfEvent.EL[el] = this;
        this.on(el,event,callback);
    }
    selfEvent.prototype.on = function(el,event,callback){
        this.event[event] = function(){
            callback.apply(el,arguments);
        }
    }
    selfEvent.prototype.fire = function(el,event,args){
        this.event[event].call(el,args);
    }
    selfEvent.EL= {};
    
    return function(event,argsOrCallBack){
        $(this).each(function(){
            var isBind = typeof argsOrCallBack === 'function';
            if(isBind){
                new selfEvent(this,event,argsOrCallBack)
            }else{
                selfEvent.EL[this].fire(this,event,argsOrCallBack);
            }
        });
    }
})();

$('body').youName('test',function(data){
    console.log(data)
});//绑定事件test
$('body').youName('test',[1,2,3,4])//触发test事件,参数为[1,2,3,4]


简单的表示一下吧。

大概就是这么个意思,以上代码还有很多东西要完善。