crv*_*crv 7 jquery event-handling
var test = { }
$(test).on("testEvent", function (){
console.log("testEvent has fired");
});
$.event.trigger("testEvent");
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用jQuery来使用事件来执行发布/订阅机制.我需要能够将事件附加到非DOM对象,并且能够从一个全局触发器中激活它们.我希望上面的代码可以工作,但它不会导致测试对象的testEvent触发.
请注意,将有多个对象在其中订阅事件.单个$ .event.trigger应该触发所有这些事件.
请注意,此代码工作正常:
$('#someID').on("testEvent", function () {
console.log('testEvent has fired from DOM element');
})
$.event.trigger("testEvent");
Run Code Online (Sandbox Code Playgroud)
在做了一些研究后,似乎jQuery 1.7提供了一种引入发布/订阅机制的简单方法.(在此处找到)为了拥有发布/订阅机制,可以使用以下代码:
(function ($, window, undefined) {
var topics = {};
jQuery.Topic = function (id) {
var callbacks, method, topic = id && topics[id];
if (!topic) {
callbacks = jQuery.Callbacks();
topic = {
publish: callbacks.fire,
subscribe: callbacks.add,
unsubscribe: callbacks.remove
};
if (id) {
topics[id] = topic;
}
}
return topic;
};
})
Run Code Online (Sandbox Code Playgroud)
要订阅活动,请执行以下操作:
$.Topic("message").subscribe(function () {
console.log("a publish has occurred");
});
Run Code Online (Sandbox Code Playgroud)
为了发布消息,完成以下操作:
$.Topic( "message" ).publish(data);
Run Code Online (Sandbox Code Playgroud)
"消息"是事件名称.data参数包含要传递给订阅者的任何信息.
要取消订阅,您必须传递已订阅的功能:
$.Topic( "message" ).unsubscribe(funcSubscribedToBefore);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3116 次 |
| 最近记录: |