2012-11-19 19 views
13

मुझे उन उपयोगकर्ताओं की एक सूची मिली है जो मैं अपनी सेवा से पुनर्प्राप्त करता हूं। जब मैं किसी भी उपयोगकर्ता का चयन करता हूं तो मैं (ईमेल, भूमिकाएं, आदि) जानकारी देख और संपादित कर सकता हूं। समस्या यह है कि मैं नहीं चाहता कि इन परिवर्तनों में सूची में उपयोगकर्ता के डेटा को प्रभावित किया जाए, मैं केवल सहेजने के बाद डेटा अपडेट करना चाहता हूं (एक बटन क्लिक करना)।चर के बीच कोणीय जेएस बाध्यकारी

अब मैं दो चर का उपयोग कर रहा: - वर्तमान में चयनित उपयोगकर्ता
$scope.editable -

$scope.selected चर डेटा मैं संपादन कर रहा हूँ

के भंडारण के लिए और मैं इस तरह डेटा का आदान-:

$scope.initEditable = function() 
{ 
    $scope.editable = {}; 
    $.extend($scope.editable, $scope.selected); 
} 

एक भयानक समाधान की तरह लग रहा है। ऐसा करने का सही तरीका क्या है?

उत्तर

15

असल में, यह इस समस्या के करीब आने का कोणीय तरीका है, आप सही रास्ते पर हैं। आपके जैसे परिदृश्यों में एक आम तौर पर होता है:

  • कॉपी पर चयन (संपादित शुरू) एक आइटम - यह आप
  • साथ editable
  • एक प्रति (या एक मूल तत्व) को बदलने के लिए बाध्य 2 तरह डेटा है कि क्या करना है
  • संपादित पूरा होने के हम इस पद्धति के बारे में मूल

अच्छा बातें करने के लिए एक प्रतिलिपि से बदलावों के प्रभावी कर सकते हैं पर है कि हम आसानी से कर सकते हैं:

  • 'रद्द करें' कार्यक्षमता प्रदान करें जहां उपयोगकर्ता अपने परिवर्तनों को वापस कर सकते हैं
  • इस तुलना के आधार पर यूआई के एक प्रति और मूल और ड्राइव भागों की तुलना करने में सक्षम हो (उदाहरण के लिए, हम वहां 'सहेजें' बटन अक्षम कर सकते हैं कोई बदलाव नहीं थे)

तो, मुझे नहीं लगता कि यह दृष्टिकोण भयानक है। मेरे पास एकमात्र सुझाव है कि $.extend के बजाय कोणीय के angular.copymethod का उपयोग करना है।

+2

उस सामग्री को स्वचालित करने के लिए मैंने बनाया है ** आलसी मॉडल ** निर्देश https://github.com/vitalets/lazy-model – vitalets

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