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.');
});