2013-02-10 32 views
19

साफ अप मैं है संपादित करें और नए के लिए निम्न दो मार्गों:सही कोड

WZ.ExercisesNewRoute = Em.Route.extend 
    model: -> 
    WZ.Exercise.createRecord() 
    deactivate: -> 
    @_super.apply this, arguments 
    @get('currentModel.transaction').rollback() 

WZ.ExercisesEditRoute = Em.Route.extend 
    model: (params) -> 
    WZ.Exercise.find(params.exercise_id) 
    serialize: (params, options) -> 
    exercise_id: params.get('id') 
    deactivate: -> 
    @_super.apply this, arguments 
    tx = @get('currentModel.transaction') 
    tx.rollback() if tx 

मुझे पता है कि क्या सही कोड प्रत्येक में होना चाहिए चाहते हैं निष्क्रिय तो दुकान एक सही राज्य उपयोगकर्ता अगर में है बचाता है, बचाता है या जो कुछ भी करता है।

वर्तमान में यदि बिना सहेजे नया मार्ग को संपादित करने के लिए मार्ग मैं मार्ग और उसके बाद सीधे, मैं निम्नलिखित त्रुटि मिलती है:

Uncaught Error: Attempted to handle event willSetProperty on while in state rootState.deleted.saved. Called with {reference: [object Object], store: , name: name}

+0

क्या आप मार्ग के बाहर निकलने का मतलब रखते हैं? क्या आप इस तरह कुछ ढूंढ रहे हैं: http://stackoverflow.com/questions/14797338/ember-clear-form-after-submitting –

+0

त्रुटि तब होती है जब विशेष रूप से संपादन मार्ग से सीधे नए मार्ग तक संक्रमण होता है और फिर बदलने की कोशिश करता है आदर्श। – dagda1

+0

हे, यह एक पुराना सवाल है, लेकिन क्या आपने ऐसा करने के लिए वैचारिक तरीके से पता लगाया है? –

उत्तर

1

यह सवाल एंबर डेटा के एक पुराने संस्करण के लिए है, लेकिन उत्तर होगा अगर पहले से ही हटाया नहीं गया है तो हटाए गए और केवल रोलबैक के लिए राज्य को जांचने के लिए किया गया है।

नए एम्बर डेटा में लेनदेन की कोई अवधारणा नहीं है, लेकिन यदि आप एक ऐसे रिकॉर्ड को रोलबैक करने का प्रयास कर रहे हैं जो अभी तक जारी नहीं है, तो भी आप एक समान समस्या में भाग सकते हैं।

मैं शायद राउटर में ऐसा करूँगा ट्रांज़िशन इवेंट के रूप में आप संक्रमण को रद्द करने जैसी चीजें कर सकते हैं यदि आप उपयोगकर्ता को परिवर्तनों को सहेजने का विकल्प देना चाहते हैं।

willTransition: function(transition) { 
    controller = this.get('controller') 
    if(controller.get('content.isDirty')) { 
    if(controller.get('content.isNew') && confirm('Closing this window will revert all unsaved changes.')){ 
     controller.get('content').deleteRecord(); 
    } else { 
     controller.get('content').rollback() 
    } 
    } 
    }