2015-02-20 9 views
7

के भीतर अन्य विधि से कॉल विधि मैं केवल एम्बर.जेएस सीख रहा हूं और थोड़ा सा झुकाव में भाग गया हूं।एम्बर सेवा

export default Ember.Service.extend({ 
    myMethod: function() { ... }, 

    otherMethod: function() { 
    this.myMethod(); // <---- this doesn't work 
    this.get('myMethod')(); // <---- also doesn't work 
    Ember.run.bind(this, this.myMethod)() // <---- no dice 
    } 
}); 

वहाँ यह करने के लिए कोई तरीका है: मैं एक सेवा है जहाँ मैं, एक और तरीका मैं एक ही वस्तु के भीतर परिभाषित किया है कॉल करने के लिए तो जैसे चाहते हैं? मैं अपने कोडबेस के भीतर कोड का पुन: उपयोग करना चाहूंगा।

धन्यवाद।

+0

आपका प्रश्न वास्तव में किसी भी प्रकार की जानकारी पर छोटा है, उदा। आप अपनी सेवा पर 'myMethod()' को प्रारंभ और कॉल कैसे कर रहे हैं। लेकिन, आपको 'एम्बर सेवा' का विस्तार नहीं करना चाहिए, बल्कि 'एम्बर.ऑब्जेक्ट', और आपको इसे सही तरीके से शुरू करना चाहिए: http://emberjs.com/guides/understanding-ember/dependency-injection-and-service-lookup/ – Leeft

+0

... यह एम्बर प्रशिक्षण पाठ्यक्रम का हिस्सा है, इसलिए मैं बस यह कर रहा हूं कि वे मुझे कैसे बता रहे हैं मुझे चाहिए। मुझे यकीन नहीं है कि अन्य प्रकार के विवरण आवश्यक हैं। क्या मैं किसी ऑब्जेक्ट की विधि को अपने भीतर से कॉल नहीं कर सकता? – Jason

+0

मान लें कि आप इस वर्ग के साथ कुछ प्रकार की नई वस्तु बना रहे हैं, और फिर 'serviceObject.otherMethod()' को कॉल कर रहे हैं, आपको बस ऐसा करने में कोई समस्या नहीं होनी चाहिए। आपके द्वारा दिखाए गए कोड में कुछ भी नहीं है जो इसे प्रतिबंधित करेगा, इसलिए यह होना चाहिए कि आप इसे कैसे बनाते हैं या इसका उपयोग करते हैं। – Leeft

उत्तर

2

मुझे लगता है कि आप इस बिंदु से पहले से ही चले गए हैं। लेकिन यहां एक एम्बर-ट्विडल है, जो यह दर्शाता है कि एक सेवा कैसे अपनी विधियों का संदर्भ दे सकती है। जैसा कि टिप्पणियों में कहा गया था, यह this के बारे में एक जावास्क्रिप्ट चीज है।

https://ember-twiddle.com/7caf29fe1df7f36e6e3e49578fc3aed3?openFiles=services.movie-service.js%2Ctemplates.components.movie-viewer.hbs

+0

मुझे पता है कि यह पुराना है, लेकिन मैं इस पहेली काम कैसे करूँगा? मैंने मूल रूप से एक फ़ंक्शन कॉल, 'displayMovies() ', आपके ट्विडल में किए गए क्रिया के लिए https://ember-twiddle.com/27aebdeb9ab75841ee16b3dbd8df3f76?openFiles=services.movie-service.js%2Ctemplates.components.movie-viewer जोड़ा .hbs – mk2

+1

हाय @ मर्कस रेनो, अगर मैं सही ढंग से अपना ट्विडल पढ़ता हूं तो आप फिल्म सेवा के साथ फिल्में प्रदर्शित करना चाहते हैं। हालांकि मैं इसके खिलाफ सलाह दूंगा। फिल्में सेवा एक सिंगलटन है और जिस चीज को आप चीजों को प्रदर्शित करने की योजना बना रहे हैं, उससे बाहर हो सकती है, या आप इसे कई अलग-अलग घटकों के बीच साझा करना चाहेंगे। इसके बजाए, सेवा के साथ डेटा संग्रहित करना और घटकों के साथ इसका उपभोग करना शायद आपकी सबसे अच्छी शर्त – shane

+1

है यह एक अच्छा सुझाव है, लेकिन जिस समस्या को मैंने पूछने की कोशिश की वह अलग थी। फ़ंक्शन डिस्प्लेमोविज़ सिर्फ एक फ़ंक्शन का उपयोग करने के लिए किसी अन्य फ़ंक्शन के भीतर फ़ंक्शन का उपयोग करने के लिए बनाया गया था, यदि कोई फ़ंक्शन बड़ा हो जाता है। मैं कार्यक्षमताओं को अलग रखना पसंद करता हूं इसलिए इसे पढ़ना/बनाए रखना आसान है – mk2