2012-06-22 8 views
6

एक बाध्य संपत्ति बदलते समय स्वचालित रूप से एक अवलोकन योग्य सरणी को सॉर्ट करने का कोई तरीका है? मैं निम्नलिखित उदाहरण में विश्वास करता हूं, जब मैं एक नया व्यक्ति जोड़ता हूं, तो मेरा दृश्य अपडेट होता है, लेकिन क्या मुझे रीफ्रेश करने और मेरे सॉर्टिंग फ़ंक्शन को लागू करने के लिए दृश्य मिल सकता है यदि किसी व्यक्ति की उम्र बदल जाती है?स्वचालित रूप से ko.observableArray को बाध्य गुणों के रूप में सॉर्ट करें

person = { 
    age: ko.observable(); 
} 

viewModel = { 

    people: ko.observableArray([]), 

    someSortFunction: function() { 
     this.people.sort(function(person1, person2) { 
      return person2.age() - person1.age(); 
     }); 
    } 
} 

<div data-bind="foreach: people"> 
    <span data-bind="text: age"/> 
</div> 

उत्तर

4

आप एक नमूदार सदस्यता लें और कार्य जब भी उस नमूदार परिवर्तन कर सकते हैं:

person.age.subscribe(function (newValue) { 
    viewModel.someSortFunction(); 
}); 
+1

नोट: वहाँ इस दृष्टिकोण है कि यह विचार कर उन लोगों के बारे में पता होना चाहता हूँ के साथ मुद्दों कर रहे हैं। सबसे पहले: यह सुनिश्चित करने के लिए कि अवलोकन योग्य सरणी निरंतर प्रकार से आपको सरणी में प्रत्येक तत्व पर मैन्युअल रूप से उसी संपत्ति की सदस्यता लेनी होगी। दूसरा: सदस्यता तब तक बनी रहती है जब तक कि आप उन्हें प्रत्येक तत्व पर मैन्युअल रूप से हटा दें जब तक आप इसे अवलोकन योग्य सरणी से हटा दें। यह एक स्मृति रिसाव के लिए संभावित बनाता है। महान तकनीक के साथ इस तकनीक का प्रयोग करें। – Randolpho

+1

@Randolpho :: काफी सच ... जो स्पष्ट प्रतीत हो सकता है, वह 'अनकॉटेड रेंज एरर: अधिकतम कॉल स्टैक आकार से अधिक' की तरह एक त्रुटि का कारण बन सकता है जिसमें 'सब्सक्राइब' प्रति प्रकार चलती रहती है ... और कभी नहीं रुकती – beauXjames

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