How do i create custom event in javascript with out using DOM -
i have 2 objects. objeca
triggers event e
, objectb
has listen event triggered objecta (e)
. objecta
sends when property in changes @ run time.
thanks in advance.
you can use pubsub pattern
var pubsub = {}; (function(myobject) { // storage topics can broadcast // or listened var topics = {}; // topic identifier var subuid = -1; // publish or broadcast events of interest // specific topic name , arguments // such data pass along myobject.publish = function(topic, args) { if (!topics[topic]) { return false; } var subscribers = topics[topic], len = subscribers ? subscribers.length : 0; while (len--) { subscribers[len].func(topic, args); } return this; }; // subscribe events of interest // specific topic name , // callback function, executed // when topic/event observed myobject.subscribe = function(topic, func) { if (!topics[topic]) { topics[topic] = []; } var token = (++subuid).tostring(); topics[topic].push({ token: token, func: func }); return token; }; // unsubscribe specific // topic, based on tokenized reference // subscription myobject.unsubscribe = function(token) { (var m in topics) { if (topics[m]) { (var = 0, j = topics[m].length; < j; i++) { if (topics[m][i].token === token) { topics[m].splice(i, 1); return token; } } } } return this; }; }(pubsub)); implementation: // simple message handler // simple message logger logs topics , data received through our // subscriber var messagelogger = function(topics, data) { console.log("logging: " + topics + ": " + data); }; // subscribers listen topics have subscribed , // invoke callback function (e.g messagelogger) once new // notification broadcast on topic var subscription = pubsub.subscribe("inbox/newmessage", messagelogger); // publishers in charge of publishing topics or notifications of // interest application. e.g: pubsub.publish("inbox/newmessage", "hello world!"); // or pubsub.publish("inbox/newmessage", ["test", "a", "b", "c"]); // or pubsub.publish("inbox/newmessage", { sender: "hello@google.com", body: "hey again!" }); // can unsubscribe if no longer wish our subscribers // notified pubsub.unsubscribe(subscription); // once unsubscribed, example won't result in our // messagelogger being executed subscriber is`enter code here` // no longer listening pubsub.publish("inbox/newmessage", "hello! still there?");
Comments
Post a Comment