2011-11-16 19 views
6

Bir kez çağrılmanın bir yolu, değer üzerinde bazı yöntemler değişti mi? Bazı değer myMethod dependencyObservable gelip çünkü iki kez denir değiştirdiğinizde Değer üzerinde özel bir yöntem çağırma değişti

var update = bindingHandlers.value.update; 

bindingHandlers.value.update = function(element, valueAccessor, allBindingAccessor, viewModel) { 
    var newValue = ko.utils.unwrapObservable(valueAccessor()); 
    var elementValue = ko.selectExtensions.readValue(element); 
    var valueHasChanged = (newValue != elementValue); 

    update(element, valueAccessor, allBindingAccessor, viewModel); 

    if (valueHasChanged) { 
     myMethod(); 
    } 
} 

Maalesef da değiştirilir: Ben bu yöntemi çağırmak olduğunu bindingHandlers.value için sarıcı yarattı. Herhangi bir fikir? Yeni değiştirdiğiniz bir değere abone olmak istiyorsanız

cevap

8

, herhangi gözlenebilir abone olabilirsiniz:

function subscribeAll(viewModel) { 
    for(var propertyName in viewModel) { 
     if(viewModel[propertyName].subscribe === 'function') { 
      viewModel[propertyName].subscribe(function(newValue) { 
       //do stuff 
      } 
     } 
    } 
} 
+0

I:

var viewModel = { property: ko.observable() }; viewModel.property.subscribe(function(newValue) { //do stuff }); 

gibi bir şey yapabileceğini bir nesnenin tüm özelliklerine abone olmak için yaklaşık 20 özellik ile nesne gerekir kira hesap makinesi var ve bu parametre olarak benim viewModel benim geçmek istiyorum, bu yüzden özelliklerin çoğuna abone olmak istiyorum. –

+0

Her zaman özellikleri gözlemlenebilir ve her biri "gözlenebilir" veya "gözlenebilirArray" çağrısı olan "abone ol" açık (her yolun bir "abone" işlevine sahip olup olmadığını sınamanın kolay yolu olabilir) –

+0

"subscribeAll" yöntemi, sadece sığ grafikleri, derin grafikler yapmadığını unutmayın. –

İlgili konular