Ответ 1
Вместо использования системы событий jquery я бы выполнил один, который имитирует его, используя метод jQuery.Callbacks.
var myClass = function(){
this._callbacks = {};
};
myClass.prototype = {
addEvent: function(evname,callback) {
if (!this._callbacks[evname]) {
this._callbacks[evname] = $.Callbacks();
}
this._callbacks[evname].add(callback);
},
removeEvent: function(evname) {
if (!this._callbacks[evname]) {
return;
}
this._callbacks[evname].remove();
//Might need this too:
//this._callbacks[evname] = null;
},
triggerEvent: function(evname) {
if (this._callbacks[evname]) {
this._callbacks[evname].fire();
}
}
};
var foo = new myClass();
foo.addEvent("foo",function(){
console.log('foo');
});
foo.triggerEvent("foo");
foo.removeEvent("foo");
// event was removed, the below line won't do anything.
foo.triggerEvent("foo");
Однако, чтобы ответить на ваш вопрос, я не вижу никаких неотложных проблем с тем, что вы делаете, кроме того, что он не документирован и может изменять функциональность от версии к версии (хотя он работает во всех доступных в настоящее время версиях 1.2.6 +).