2011-06-07 17 views
8

एक अवलोकन योग्य सरणी को संभालने का सबसे अच्छा तरीका क्या है जिसे नॉकआउटजेएस में हटाया/फेंक दिया जा सकता है?क्या knockoutJS समर्थन संरक्षित अवलोकन सरणी है?

मैंने इसे ProtectedObservable विचार से पहले हासिल किया है लेकिन यह एक सरणी पर नहीं, डेटा के एक रिकॉर्ड पर था।

बस आश्चर्य हुआ कि कैसे आगे बढ़ना है। मेरे प्रोजेक्ट के लिए सभी ईमेल पता संपर्कों और चयनित लोगों की एक सूची के एक संवाद की आवश्यकता है। चूंकि उन्हें बाईं ओर एक सूची से जोड़ा जाता है, इसलिए उन्हें हटा दिया जाता है और दाईं ओर एक सूची में जोड़ा जाता है।

जब 'ठीक' बटन दबाया जाता है, तो उन्हें फ़ील्ड में जोड़ा जाता है लेकिन जब 'रद्द' दबाया जाता है तो सूचियों को उनके पिछले राज्य में बहाल किया जाता है (जो पहले से ही पहले से आबादी हो सकती थी)।

उत्तर

11

कैसे कुछ इस तरह के बारे में: http://jsfiddle.net/rniemeyer/PAzVk/

यह एक observableArray "स्नैपशॉट" का समर्थन करता है कि उपयोग करता है। आप अंतर्निहित सरणी की एक प्रति सहेज सकते हैं और जब चाहें इसे पुनर्स्थापित कर सकते हैं।

ko.snapShotObservableArray = function(initialData) { 
    var _snapShot = initialData; 
    var result = ko.observableArray(initialData || []); 

    result.takeSnapShot = function() { 
     _snapShot = this().slice(); //take a copy of the underlying array 
    }; 

    result.restoreSnapShot = function() { 
     this(_snapShot.slice()); 
    } 

    return result; 
} 

नमूने में, आप "प्रति" लाइन पर उपलब्ध उपयोगकर्ताओं की आप सरणी चुने गए उपयोगकर्ताओं के सरणी, और उपयोगकर्ताओं की सरणी पर इस का प्रयोग करेंगे। फिर, रद्द करें बटन प्रत्येक सरणी को उस बिंदु पर पुनर्स्थापित करें जिसे आपने अंतिम स्नैपशॉट लिया था।

+0

स्नैपशॉट को पुनर्स्थापित करने के लिए मामूली अद्यतन, क्योंकि इसे प्रतिलिपि बनाने की आवश्यकता है। –

+0

हमेशा के रूप में, एक शानदार समाधान। धन्यवाद रयान। –

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