2015-03-02 10 views
9

रद्द करने पर वापस जाएं I मेरे पास विभिन्न स्क्रीन (उपयोगकर्ता सूची, उपयोगकर्ता समूह आदि से) से प्रदर्शित उपयोगकर्ता का एक लिंक है। जब लिंक क्लिक किया जाता है, तो उपयोगकर्ता को संपादित करने के लिए प्रस्तुत किया जाता है। जब संपादन बटन में रद्द बटन दबाया जाता है, तो मैं पिछली स्क्रीन उपयोगकर्ता सूची/समूह में संक्रमण करना चाहता हूं। यह आम तौर पर एम्बरज में कैसे प्राप्त किया जाता है।Emberjs

धन्यवाद, मुरली

+0

आप userController जिसका मूल्य तुम कहाँ उपयोगकर्ता रूट करने के लिए से आ रहे हैं पर निर्भर करता है में एक चर सेट कर सकते हैं। रद्द करें बटन से जुड़ी कार्रवाई में, आप यह तय करने के लिए चर के मूल्य का उपयोग कर सकते हैं कि कौन सा मार्ग वापस संक्रमण में है। आप पुराने मार्ग पर वापस जाने के लिए संक्रमण ToRoute का उपयोग कर सकते हैं। इसका कोई मतलब भी है क्या? –

+0

अगर आपके पास कोड के साथ JSFiddle है तो यह समझाना आसान होगा। –

+0

आपका दृष्टिकोण समझ में आता है। मैंने सोचा कि एक आसान तरीका हो सकता है। इसे सिर्फ बैक बटन व्यवहार को दोहराना है। मेरे पास JSFiddle नहीं है, मैं एक – Murali

उत्तर

18

आप कुछ भी नहीं की जरूरत है

history.back() 

मुख्य डिजाइन में से एक एम्बर के उद्देश्यों, और वास्तव में अधिकांश ओपीए ढांचे, ब्राउज़र के इतिहास के ढेर के साथ सामंजस्यपूर्ण रूप से काम करना है ताकि back "बस काम करता है"।

तो आपको अपने स्वयं के मिनी-इतिहास स्टैक, या वैश्विक चर या संक्रमण हुक को बनाए रखने की आवश्यकता नहीं है।

आप अपने आवेदन राउटर में back कार्रवाई कर सकते हैं, जिसमें प्रत्येक क्रिया से कौन से क्रियाएं बुलबुले हो जाएंगी, ताकि आप किसी भी टेम्पलेट में {{action 'back'}} कह सकें।

+0

बनाने का प्रयास करूंगा, जिस दृष्टिकोण में मैंने प्रस्तावित किया वह मुझे आधा बेक्ड महसूस किया, इसलिए यदि @ टोरज़ाबूरो दृष्टिकोण काम करता है - इसके साथ रोल करें। :) – Kalman

+0

@ कोलमन मैंने आपके दृष्टिकोण पर कई रूपों को देखा है, इसलिए आप अगस्त में हैं। हालांकि, मैंने कभी ऐसा मामला नहीं देखा है जहां यह वास्तव में जरूरी था, उत्पाद/फीचर लोगों के विरोध के बावजूद कि वे "वास्तव में" उपयोगकर्ता को "वास्तव में" जादू स्थान पर जाना चाहते हैं। दूसरी तरफ, मेरे पास एक से अधिक मामले में देखा गया जहां गरीब schlobs आधा बेक्ड रोल बनाए रखने के अंत में अपने इतिहास तंत्र को बनाए रखने तक समाप्त हो गया। –

+0

'Back 'यह काफी अच्छी तरह से करता है। – Caltor

1

संभवतः सुखाने के लिए (अपने आप को दोहराने नहीं है) इस के लिए एक रास्ता है, लेकिन यह ऐसा करने का एक ही रास्ता 2 कार्यों के लिए है: willTransition जो एंबर पहले से ही आप और goBack जो देता है आप खुद को परिभाषित करते हैं। फिर, "वैश्विक" lastRoute चर है कि आप इस प्रकार का ट्रैक रखने के है:

App.OneRoute = Ember.Route.extend({ 
    actions: { 
    willTransition: function(transition){ 
     this.controllerFor('application').set('lastRoute', 'one'); 
    }, 
    goBack: function(){ 
     var appController = this.controllerFor('application'); 
     this.transitionTo(appController.get('lastRoute')); 
    } 
    } 
}); 

और अपने टेम्पलेट के रूप में विचार करेंगे इस प्रकार है:

<script type="text/x-handlebars" id='one'> 
    <h2>One</h2> 
    <div><a href='#' {{ action 'goBack' }}>Back</a></div> 
</script> 

कार्य उदाहरण here

2

मेरा समाधान यहां है, जो बहुत ही सरल और उच्च प्रदर्शन है।

// file:app/routers/application.js 
 
import Ember from 'ember'; 
 

 
export default Ember.Route.extend({ 
 
    transitionHistory: [], 
 
    transitioningToBack: false, 
 

 
    actions: { 
 
    // Note that an action, like 'back', may be called from any child! Like back below, for example. 
 

 
    willTransition: function(transition) { 
 
     if (!this.get('transitioningToBack')) { 
 
     this.get('transitionHistory').push(window.location.pathname); 
 
     } 
 
     this.set('transitioningToBack', false); 
 
    }, 
 
    
 
    back: function() { 
 
     var last = this.get('transitionHistory').pop(); 
 
     last = last ? last : '/dash'; 
 
     this.set('transitioningToBack', true); 
 
     this.transitionTo(last); 
 
    } 
 
    } 
 
});

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