eventProxy是一款非常好用的javascript事件管理系统,他可以用于前端或者后端,一共有如下方法:
//绑定事件 test("EventProxy - bind/trigger", function() { var obj = new EventProxy(); var counter = 0; obj.bind("event", function(data) { counter += 1; }); obj.trigger("event"); equal(counter, 1, 'Counter should be incremented.'); obj.trigger("event"); equal(counter, 2, 'Counter should be incremented.'); obj.trigger("event"); equal(counter, 3, 'Counter should be incremented.'); obj.trigger("event"); equal(counter, 4, 'Counter should be incremented.'); }); //解绑事件 test("EventProxy - bind, then unbind all functions", function () { var obj = new EventProxy(); var counter = 0; obj.bind('event', function() { counter += 1; }); obj.trigger('event'); equal(counter, 1, 'counter should be incremented.'); obj.unbind('event'); obj.trigger('event'); equal(counter, 1, 'counter should have only been incremented once.'); }); //只触发一次 test("EventProxy - once/trigger", function () { var obj = new EventProxy(); var counter = 0; obj.once('event', function() { counter += 1; }); obj.trigger('event'); equal(counter, 1, 'counter should be incremented.'); obj.trigger('event'); equal(counter, 1, 'counter should have only been incremented once.'); }); //刚绑定好就触发 test("EventProxy - immediate", function () { var obj = new EventProxy(); var counter = 0; obj.immediate('event', function (){ counter +=1; }); equal(counter, 1, "counter should be incremented."); obj.trigger('event'); equal(counter, 2, "counter should be incremented."); }); //把参数传入 test("EventProxy - immediate/parameter", function () { var obj = new EventProxy(); var param = 0; obj.immediate('event', function (data){ equal(data, param, "data should same as param."); }, param); }); //只触发一次 test("EventProxy - assign one event", function () { var obj = new EventProxy(); var counter = 0; obj.assign('event', function() { counter += 1; }); obj.trigger('event'); equal(counter, 1, 'counter should be incremented.'); obj.trigger('event'); equal(counter, 1, 'counter should have only been incremented once.'); }); //只触发一次,在所有event好了以后触发 test("EventProxy - assign two events", function () { var obj = new EventProxy(); var counter = 0; obj.assign('event1', 'event2', function(event1, event2) { equal(event1, 'event1', 'counter should not be incremented.'); equal(event2, 'event2', 'counter should not be incremented.'); counter += 1; }); obj.trigger('event1', 'event1'); equal(counter, 0, 'counter should not be incremented.'); obj.trigger('event2', 'event2'); equal(counter, 1, 'counter should be incremented.'); obj.trigger('event2'); equal(counter, 1, 'counter should have only been incremented once.'); }); //来一次触发一次 test("EventProxy - assignAlways", function () { var obj = new EventProxy(); var counter = 0; var event2 = null; obj.assignAlways('event1', 'event2', function(data1, data2) { counter += 1; equal(data2, event2, 'Second data should same as event2.'); }); obj.trigger('event1', 'event1'); equal(counter, 0, 'counter should not be incremented.'); event2 = "event2_1"; obj.trigger('event2', event2); equal(counter, 1, 'counter should be incremented.'); event2 = "event2_2"; obj.trigger('event2', event2); equal(counter, 2, 'counter should be incremented.'); }); //在第N次以后触发 test("EventProxy - after, 5 times", function () { var obj = new EventProxy(); var counter = 0; obj.after('event', 5, function(data) { equal(data.join(","), "1,2,3,4,5", 'Return array should be 1,2,3,4,5'); counter += 1; }); obj.trigger('event', 1); equal(counter, 0, 'counter should not be incremented.'); obj.trigger('event', 2); equal(counter, 0, 'counter should not be incremented.'); obj.trigger('event', 3); equal(counter, 0, 'counter should not be incremented.'); obj.trigger('event', 4); equal(counter, 0, 'counter should not be incremented.'); obj.trigger('event', 5); equal(counter, 1, 'counter should be incremented.'); obj.trigger('event', 6); equal(counter, 1, 'counter should have only been incremented once.'); }); //0次等同于立刻触发 test("EventProxy - after, 0 time", function () { var obj = new EventProxy(); var counter = 0; obj.after('event', 0, function(data) { equal(data.join(","), "", 'Return array should be []'); counter += 1; }); equal(counter, 1, 'counter should be incremented.'); }); //任何一个被注册的事件触发都会导致注册的事件被触发 test("EventProxy - any", function () { var obj = new EventProxy(); var counter = 0; var eventData1 = "eventData1"; var eventData2 = "eventData2"; obj.any('event1', 'event2', function(map) { equal(map.data, eventData1, 'Return data should be evnetData1.'); equal(map.eventName, "event1", 'Event name should be event1.'); counter += 1; }); obj.trigger('event1', eventData1); equal(counter, 1, 'counter should be incremented.'); obj.trigger('event2', 2); equal(counter, 1, 'counter should not be incremented.'); }); //除了某种事件以外的其他事件都可以触发 test("EventProxy - not", function () { var obj = new EventProxy(); var counter = 0; obj.not('event1', function(data) { counter += 1; }); obj.trigger('event1', 1); equal(counter, 0, 'counter should not be incremented.'); obj.trigger('event2', 2); equal(counter, 1, 'counter should be incremented.'); obj.trigger('event2', 2); equal(counter, 2, 'counter should be incremented.'); });