我想在我的应用程序中实现一个简单的 pub-sub,所以 KO 订阅似乎很有希望。
我有以下代码。
var announcer = new ko.subscribable();
var s1 = announcer.subscribe(function(val){
console.log('subscriber1: ' + val);
}, null, 'news');
var s2 = announcer.subscribe(function(val){
console.log('subscriber2: ' + val);
}, null, 'gossip');
var s3 = announcer.subscribe(function(val){
console.log('subscriber3: ' + val);
}, null, 'news');
在“新闻”频道发布
announcer.notifySubscribers('good news', 'news')
/* Outputs: */
subscriber1: good news
subscriber3: good news
在“八卦”频道发布
announcer.notifySubscribers('hipster news', 'gossip')
/* Outputs: */
subscriber2: hipster news
到目前为止,它似乎工作......
我的问题是:
subscribable.subscribe 期望的第二个参数是什么?
Knockout 网站从不谈论它,所以我去代码发现了这个:
subscribe: function (callback, callbackTarget, event) {
event = event || defaultEvent;
var boundCallback = callbackTarget ? callback.bind(callbackTarget) : callback;
var subscription = new ko.subscription(this, boundCallback, function () {
ko.utils.arrayRemoveItem(this._subscriptions[event], subscription);
}.bind(this));
很明显,我的 pub/sub 实现是有效的,因为我没有传递 callbackTarget,所以使用了回调。
奖励问题:
我们什么时候应该使用callbackTarget?
任何人都可以提供它的用法示例吗?