2012-05-18 178 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 
}