Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   "Искусственные" события. (https://javascript.ru/forum/events/13828-iskusstvennye-sobytiya.html)

Jurasmi 15.12.2010 17:11

"Искусственные" события.
 
Что-то найти никак не могу как реализовать вот это:
myObj.onMyEvent = что-то делать

//если где-то что-то произошло, то:
MyEvent.fire();

Смысл в том, что мы вызываем (генерируем) какое-то своё событие (MyEvent) при этом есть объект "myObj" котрый умеет узнавать что произошло событие "MyEvent" и как-то по-своему реагирует на него, помимо этого может быть ещё много всяких объектов, котрые каждый по-своему реагируют на "MyEvent".

Я знаю, есть "observer pattern" но там я что-то не найду ответ.

Господа, ткните носом, пожалуйста, где читать. Или такое в природе вообще не возможно или не так делается, а вовсе по-другому.

Jurasmi 16.12.2010 18:45

Решение:
var customEvents = {
		    _handlers : {},
		
		    subscribe: function(event, handler){
		       if(typeof(this._handlers[event])=="undefined")
		           this._handlers[event]=[]; 
		       this._handlers[event].push(handler);
		    },
		
		    fire:function(event, data){
		        if(this._handlers[event]){
		            for(var i = 0; i < this._handlers[event].length; i++){
		                this._handlers[event][i](data);
		            }
		        }
		    }
	};


var myObj1 = new function(){
		this.handler = function(data){
			console.log(data+'1');
		};
		customEvents.subscribe("greatEvent", this.handler);
	};	
	
	
	
var myObj2 = new function(){
		this.handler = function(data){
			console.log(data+'2');
		};
		customEvents.subscribe("greatEvent", this.handler);
	};	
	
	
//что-то где-то произошло
customEvents.fire("greatEvent", 'ta-da');

всем спасибо, все свободны


Часовой пояс GMT +3, время: 19:20.