2012-05-18 183 views
41

我已经订阅了使用ko来监听属性值更改的函数。如何在淘汰赛中取消订阅订阅的功能?

var self = this; 
$(document).ready(function() { 

var postbox = new ko.subscribable(); 
var myViewModel = 
{ 
    FirstName: ko.observable("Bert"), 
    LastName: ko.observable("pual") 
}; 
var sub = null; 
for (var i in myViewModel) { 
    var model = myViewModel[i]; 
    model.subscribe(self.notifyChange.bind(model, i)); 

} 

$('#unsubscribeButton').click(function() { 
    // here i want to unsubscribe. 
}); 
ko.applyBindings(myViewModel); 
    }); 
notifyChange = function (PropName, newValue) { 
var self= this; 
); 
    } 

这里我想从myViewModel的属性中逐个取消订阅notifyChange,怎么做?

回答

91

将调用订阅的结果存储在一个变量中(或者,在你的情况下,存储在一个数组中)。

如果您想取消订阅,只需在每个订阅上调用dispose。

完全形容这里 - http://knockoutjs.com/documentation/observables.html

您的代码将是这样的:

//store subscriptions in array 
var subscriptions = []; 

for (var i in myViewModel) { 
    var model = myViewModel[i]; 
    subscriptions.push(model.subscribe(self.notifyChange.bind(model, i))); 
} 


//unsubscribe 
for(var i in subscriptions) { 
    subscriptions[i].dispose(); //no longer want notifications 
}