2012-05-18 37 views
41

Tôi đã đăng ký chức năng để nghe thay đổi giá trị thuộc tính bằng cách sử dụng ko.Làm cách nào để hủy đăng ký chức năng đã đăng ký trong loại trực tiếp?

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; 
); 
    } 

tại đây tôi muốn hủy đăng ký thông báoChange từ tài sản của myViewModel từng cái một, cách thực hiện việc này?

Trả lời

91

Lưu trữ kết quả cuộc gọi đến đăng ký trong một biến (hoặc trong trường hợp của bạn, trong một mảng).

Khi bạn muốn hủy đăng ký, chỉ cần hủy bỏ quyền sở hữu đối với từng đăng ký.

mô tả đầy đủ ở đây - http://knockoutjs.com/documentation/observables.html

Mã của bạn sẽ trông như thế này:

//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 
} 
Các vấn đề liên quan