2012-10-09 11 views
20

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

समस्या यह है कि उपयोगकर्ता कहता है कि उपयोगकर्ता "बंद करें" पर कुछ बदलाव और क्लिक करता है, तो दृश्य-बाध्यकारी तत्काल होने के बाद से मॉडल में बदलावों को प्रतिबिंबित किया जाएगा।

मेरा प्रश्न तब है, मैं या तो अद्यतनों को कैसे रोकूं और केवल "परिवर्तन सहेजें" पर बाध्यकारी प्रदर्शन करता हूं, या किसी भी तरह से "रद्द करें" क्लिक होने पर परिवर्तनों को भूल जाते हैं।

मेरी मॉडल संवाद के लिए कोड तो की तरह है:

<div ui-modal class="fade static" ng-model="modalShown" id="myModal" data-backdrop="static"> 
     <div class="modal-header"> 
      <button type="button" class="close" ng-click="closeModal()" aria-hidden="true">&times;</button> 
      <h3>{{selectedClientFeature.feature.type}}</h3> 
     </div> 
     <div class="modal-body">  
      <ul class="unstyled columnlist"> 
       <li ng-repeat="country in countriesForEdit"> 
        <input type="checkbox" ng-model="country.selected"> {{country.name}} 
       </li> 
      </ul> 
     </div> 
     <div class="modal-footer"> 
      <a ng-click="closeModal()" class="btn">Close</a> 
      <a ng-click="saveChanges()" class="btn btn-primary">Save changes</a> 
     </div> 
    </div> 

धन्यवाद, शॉन

उत्तर

11

AngularJS डॉक उपयोग सिर्फ इस स्थिति का एक उदाहरण है। आपको अपने मॉडल को क्लोन करना होगा (angular.copy देखें), अपना संपादन मोडल दिखाने से पहले, और जब कोई उपयोगकर्ता closeModal() पर क्लिक करता है तो आप अपने मॉडल को क्लोन मान पर पुन: असाइन करेंगे। आईएमएचओ, मैं 'रद्द करें' बटन का नाम बदलकर 'रद्द करें' कर दूंगा और इसे 'परिवर्तन सहेजें' के दाईं ओर रखूंगा, यह अधिक स्पष्ट है और ऐसा लगता है कि कई साइटें काम करती हैं।

आशा इस

दान

1

में मदद करता है मैनुअल क्लोनिंग स्वचालित करने के लिए/मॉडल मैं lazy-model निर्देश के साथ आया था अद्यतन करने।
देखें https://stackoverflow.com/a/20643001/740245

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