2012-05-18 24 views
41

koを使用してプロパティ値の変更をリスンする関数を既に購読しています。ここでiを1 myViewModelのプロパティ1からnotifyChangeを解除したいノックアウトで登録された機能の登録を解除するには?

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

、これをどのように行うには?

答えて

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 
} 
関連する問題