2012-06-07 7 views
12

क्या एम्बर डेटा मॉडल में आसानी से बदलाव को वापस करने का कोई तरीका है?एम्बर डेटा मॉडल में परिवर्तन वापस करें

मेरे पास एक संपादन दृश्य के लिए एक मॉडल है। यह दृश्य उपयोगकर्ता को संपादन रद्द करने में सक्षम बनाता है, जिस बिंदु पर मैं मॉडल में परिवर्तनों को वापस करना चाहता हूं। क्या पक्ष के सभी मूल्यों को क्लोन किए बिना ऐसा करने का कोई आसान तरीका है?

+2

'वस्तु .get ('लेनदेन')। रोलबैक() ' –

उत्तर

6

एम्बर डेटा लेनदेन की अवधारणा का समर्थन करता है। हम एक लेनदेन बना सकते हैं और उन्हें एम्बर डेटा रिकॉर्ड असाइन कर सकते हैं और यदि हम परिवर्तनों को पूर्ववत करना चाहते हैं तो हम लेनदेन रोलबैक() विधि को कॉल कर सकते हैं। इसके अलावा यदि हम एक स्पष्ट लेनदेन नहीं बनाते हैं तो रिकॉर्ड्स को एक डिफ़ॉल्ट लेनदेन को सौंपा जाता है जिसे रोलबैक() विधि को DS.store ऑब्जेक्ट पर कॉल करके वापस रोल किया जा सकता है।

+2

धन्यवाद! पूर्णता के लिए, एम्बर डेटा स्रोतों में लेनदेन का एक अच्छा लेखन है। डीएस की परिभाषा के ऊपर टिप्पणी ब्लॉक पढ़ें। अनुवाद – outside2344

+1

लेनदेन के लिए टिप्पणी ब्लॉक यह भी कहता है कि हम डिफ़ॉल्ट लेनदेन के मामले में सीधे स्टोर ऑब्जेक्ट पर "प्रतिबद्ध" या "रोलबैक" चला सकते हैं। जब मैं रोलबैक करने का प्रयास करता हूं, तो मुझे एक त्रुटि मिलती है: टाइप एरर: ऑब्जेक्ट <(डीएस.स्टोर का सबक्लास): ember1117> में कोई विधि नहीं है 'रोलबैक' इसके साथ कोई मदद? – inertia

5

डिफ़ॉल्ट लेनदेन का नाम 'डिफ़ॉल्ट ट्रांज़ेक्शन' नाम दिया गया है। वास्तव में, जब एम्बर काम करता है, तो यह इस डिफ़ॉल्ट लेनदेन का उपयोग करता है। मैं सीधे दुकान पर सीधे रोलबैक का उपयोग नहीं कर सकता।

store.get('defaultTransaction').rollback() 

या (यदि आप एक रूटर इवेंट मैनेजर में हैं)

event.get('store.defaultTransaction').rollback() 
2

तुम भी एक rollback पर कर सकता है:

इसके बजाय store.rollback का उपयोग करने का

, आप की तरह कुछ करना चाहिए था मॉडल खुद ही अगर यह "isDirty" स्थिति में है।

this.get('model').rollback(); 

उदाहरण

export default Ember.ObjectController.extend({ 

actions: { 
    cancelEditModel: function(){ 

     this.get('model').rollback(); 

     this.transitionToRoute('...'); 

     return false; 
    } 
    } 
}); 
10

एंबर डाटा संस्करण 2 से शुरू, वहाँ अब और लेन-देन नहीं हैं, लेकिन आप के साथ उनके अंतिम स्थिति के लिए मॉडल रीसेट कर सकते हैं इससे पहले कि बचाया संस्करण:

model.rollbackAttributes();