【发布时间】:2014-10-12 11:11:40
【问题描述】:
我已经使用 jQuery 事件完成了一些发布/订阅。
基本功能有效:
var publish = function(name) { // --- works
var args = Array.prototype.slice.call(arguments); // convert to array
args = args.slice(1); // remove arg1 (name)
$("html").trigger(name, args);
}
var subscribe = function(name, callback) { // --- works
$("html").on(name, callback);
}
var unsubscribe = function(name, callback) { // --- works
$("html").off(name, callback);
}
// usage: // --- works
var myhandler = function () { /* ... */ };
subscribe("foo", myhandler);
publish("foo", 1, false, "bob", {a:1, b:"2"});
unsubscribe("foo", myhandler);
但是以我想要的方式订阅,却没有:
var subscribe = function(name, callback) { // --- can't unsub this
$("html").on(name, function () {
var args = Array.prototype.slice.call(arguments);
args = args.slice(1);
callback.apply(null, args);
});
}
我想要第二个 subscribe 函数,因为匿名回调会删除我不希望在“干净”客户端代码中出现的第一个参数(Event 对象)。我只想在回调中接收到事件数据,我不想要 Event 对象本身。
但这意味着我不能成功调用unsubscribe,因为我没有传递给off() 与传递给on() 相同的回调——这不是实际的回调,而是一个包装的匿名函数。
有没有办法解决这个问题?
【问题讨论】:
标签: javascript jquery publish-subscribe jquery-events