2011-11-16 8 views
6

क्या मूल्य पर कुछ विधि बदलने के लिए कोई तरीका है? मैं bindingHandlers.value के लिए आवरण बनाया इस विधि आह्वान है कि:मूल्य पर कस्टम विधि को शामिल करें

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

Unfortunatelly जब मैं बदल कुछ मूल्य MyMethod दो बार कहा जाता है क्योंकि dependencyObservable आ भी बदल जाता है। कोई विचार?

उत्तर

8

तुम सिर्फ बदला एक मूल्य की सदस्यता के लिए चाहते हैं, तो आप किसी भी नमूदार की सदस्यता ले सकते:

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

मैं:

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

एक वस्तु आप की तरह कुछ कर सकता है की सभी संपत्तियों के लिए सदस्यता लेने के लिए पट्टा कैलक्यूलेटर है जिसके लिए लगभग 20 गुणों के साथ ऑब्जेक्ट की आवश्यकता है और मैं पैरामीटर के रूप में इस कैलकुलेटर में अपना व्यू मॉडेल पास करना चाहता हूं, इसलिए मैं अधिकांश गुणों की सदस्यता लेना चाहता हूं। –

+0

आप हमेशा संपत्तियों को पुन: सक्रिय कर सकते हैं और प्रत्येक 'जो' देखने योग्य 'या' अवलोकन योग्य 'कॉल' सब्सक्राइब 'है (आसान तरीका यह जांचने के लिए हो सकता है कि प्रत्येक प्रॉपर्टी में' सब्सक्राइब 'फ़ंक्शन है) –

+0

मेरे उत्तर को अपडेट किया गया 'subscribeAll' विधि, ध्यान दें कि यह गहरे ग्राफ नहीं करता है, बस उथले वाले हैं। –

संबंधित मुद्दे