[英]jQuery.bind() events on plain Javascript objects
将jQuery事件绑定到普通的非DOM Javascript对象是否可以:
var myobject = {};
$(myobject).bind("foobar", function() { alert("daa"); });
$(myobject).trigger("foobar");
有什么影响
垃圾收集(没有新的引用创建阻止对象到GC'ed)
对象属性(分配给对象的新属性)?
性能
我注意到的一些事情
我将使用jQuery.Callbacks方法实现一个模仿它的方法,而不是使用jquery事件系统。
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+版本)。
看到jQuery也支持通过动画更改对象属性,这绝对没问题。
var obj = {'test':0};
var interval = setInterval(function(){console.log(obj);}, 250);
$(obj).on("fun", function(){this.test++});
$(obj).animate(
{'test':100},
3000,
function (){
console.log(obj);
clearInterval(interval);
$(obj).trigger("fun")
console.log("increment",obj);
}
);
//will console log {test: 1.5}, {test: 6.4} etc then {test: 100}
//and finally "interval" {test: 101}
Quickredfox的备份评论也是一个非常好的来源: http : //forum.jquery.com/topic/triggering-custom-events-on-js-objects
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.