2012-07-02 5 views
1

Я делаю личное чат-приложение с помощью private_pub, мой вопрос заключается в том, как отказаться от подписки на канал с помощью private_pub?Private_pub: как отказаться от подписки на канал

спасибо за вашу помощь

+0

Можете ли вы показать мне свой код о том, как вы подписались? я не знаю о private_pub, но я знаю фэй. –

+0

Я копаю его проект в github, но, к сожалению, он не включил метод отмены подписки. –

+0

да .. казалось бы, ... не отписаться! –

ответ

0

, если вы используете pjax или АЯКС много на своем сайте и на странице загружаемую с помощью AJAX вы имеете private_pub подписаться методом там вы увидите, что Он много раз подписавшись после поиска много о том, что я нашел эти вилы от privat_pub файла JavaScript, который решил эти проблемы

var PrivatePub = (function (doc) { 
var self = { 
connecting: false, 
fayeClient: null, 
fayeCallbacks: [], 
subscriptions: {}, 
subscriptionCallbacks: {}, 

faye: function(callback) { 
    if (self.fayeClient) { 
    callback(self.fayeClient); 
    } else { 
    self.fayeCallbacks.push(callback); 
    if (self.subscriptions.server && !self.connecting) { 
     self.connecting = true; 
     if (typeof Faye === 'undefined') { 
     var script = doc.createElement("script"); 
     script.type = "text/javascript"; 
     script.src = self.subscriptions.server + ".js"; 
     script.onload = self.connectToFaye; 
     doc.documentElement.appendChild(script); 
     } else { 
     self.connectToFaye(); 
     } 
    } 
    } 
}, 

connectToFaye: function() { 
    self.fayeClient = new Faye.Client(self.subscriptions.server); 
    self.fayeClient.addExtension(self.fayeExtension); 
    for (var i=0; i < self.fayeCallbacks.length; i++) { 
    self.fayeCallbacks[i](self.fayeClient); 
    }; 
}, 

fayeExtension: { 
    outgoing: function(message, callback) { 
    if (message.channel == "/meta/subscribe") { 
     // Attach the signature and timestamp to subscription messages 
     var subscription = self.subscriptions[message.subscription]; 
     if (!message.ext) message.ext = {}; 
     message.ext.private_pub_signature = subscription.signature; 
     message.ext.private_pub_timestamp = subscription.timestamp; 
    } 
    callback(message); 
    } 
}, 

sign: function(options) { 
    if (!self.subscriptions.server) { 
    self.subscriptions.server = options.server; 
    } 
    if (!self.subscriptions[options.channel]) { 
    self.subscriptions[options.channel] = options; 
    self.faye(function(faye) { 
     faye.subscribe(options.channel, self.handleResponse); 
    }); 
    } 
}, 

handleResponse: function(message) { 
    if (message.eval) { 
    eval(message.eval); 
    } 
    if (callback = self.subscriptionCallbacks[message.channel]) { 
    callback(message.data, message.channel); 
    } 
}, 

subscribe: function(channel, callback) { 
    self.subscriptionCallbacks[channel] = callback; 
} 
}; 
    return self; 
    }(document)); 

попробовать.