取消订阅Observable KnockOutJS

时间:2014-11-27 06:33:36

标签: javascript knockout.js ko.observablearray

我目前正在使用KnockOut JS并且我进行了一些关于何时通知observable的研究它会触发一个像这样的函数

function FunctionToSubscribe()
{

}

var TestObservable = ko.observableArray([]);

TestObservable.subscribe(FunctionToSubscribe);

我在此活动中订阅了FunctionToSubscribe

我目前在想是否有办法取消订阅?就像我们在c#中做的那样?当取消订阅事件时,任何人都对此有所了解???

3 个答案:

答案 0 :(得分:17)

subscribe函数返回“订阅”对象,该对象具有dispose方法,可用于取消订阅:

var TestObservable = ko.observableArray([]);

var subscription = TestObservable.subscribe(FunctionToSubscribe);

//call dispose when you want to unsubscribe
subscription.dispose(); 

另见文档:Explicitly subscribing to observables

答案 1 :(得分:3)

您可以使用dispose方法。

function FunctionToSubscribe()
{

}

var TestObservable = ko.observableArray([]);

// subscribe
var subscriber = TestObservable.subscribe(FunctionToSubscribe);

// unsubscribe
subscriber.dispose();

答案 2 :(得分:0)

就我而言,我需要暂时暂停订阅并做一些工作,所以最终我这样做了:

ko.subscribable.fn.suspendableSubscribe = function (callback, callbackTarget, event) {
    var isSuspended = false;
    return ko.utils.extend(this.subscribe(function () {
        if (!isSuspended)
            return callback.apply(this, arguments);
    }, callbackTarget, event), {
        suspend: function () { isSuspended = true; },
        resume: function () { isSuspended = false; }
    });
};

用法

var name = ko.observable('CodingYoshi');
var subscription = name.suspendableSubscribe(function(){ // code... });
subscription.suspend();
name('CodingYoshi2');
subscription.resume();