5

मैं ग्राहक पक्ष जावास्क्रिप्ट एमवीसी, पहली ember.js ऐप में नौसिखिया हूँ।रेलवे 3 नेस्टेड संसाधनों के साथ काम करने के लिए आप एम्बर-रेस्ट कंट्रोलर का उपयोग कैसे करते हैं?

मैं पोस्ट-टिप्पणियों के नेस्टेड मॉडल के प्रकार बनाने में एम्बर-आराम का उपयोग करने के लिए यहां दिए गए निर्देशों का पालन करता हूं।

http://www.cerebris.com/blog/2012/01/26/beginning-ember-js-on-rails-part-2/

मैं इस प्रकार नेस्ट संसाधनों लिखना शुरू किया:

resources :conversations do 
    resources :comments 
    end 

अब समस्या यह है कि जब मैं एंबर-आराम के नियंत्रक लिखना पड़ा:

App.commentsController = Ember.ResourceController .create ({ संसाधन प्रकार: ऐप। टिप्पणी resourceURL: '/ बातचीत /: आईडी/टिप्पणियां' });

मुझे नहीं लगता कि मैं बीच में आईडी का उपयोग कर सकता हूं; मैं उसके आसपास कैसे काम कर सकता हूं? क्या एम्बर-डेटा यह हल करता है? ऐसा लगता है कि spine.js एकीकरण इसे संभालने में थोड़ा आसान होगा। अग्रिम में धन्यवाद!

उत्तर

6

मेरा मतलब कल से मेरी पोस्ट पर आपकी टिप्पणी का उत्तर देने का अर्थ रहा है, इसलिए मुझे खुशी है कि आपने यहां सवाल पूछा था।

मुझे यह कहकर शुरू करना चाहिए कि मैंने एम्बर-रेस्ट को jQuery.ajax पर बहुत पतली परत के रूप में लिखा था। यह बहुत उन्नत नहीं है, और संघों के लिए भी एक अंतर्निहित सुविधा नहीं है। हालांकि, मैं अब एक को जोड़ने पर विचार कर रहा हूं कि इस lib को थोड़ा सा उपयोग मिल रहा है। जैसा कि आप नीचे दिए गए कोड से देखेंगे, इस अवधारणा को संभाला जा सकता है लेकिन lib में बेहतर समझा जाना चाहिए।

संघों को प्रत्येक मूल संसाधन के भीतर संसाधन नियंत्रक का उदाहरण बनाकर संभाला जा सकता है। प्रत्येक विशेष संसाधन नियंत्रक को संसाधनों की एक विशेष श्रृंखला का प्रबंधन करना चाहिए, लेकिन जरूरी नहीं कि किसी विशेष प्रकार के सभी संसाधन।

आपके मामले में, आप बातचीत के लिए टिप्पणियों का प्रबंधन करने के लिए ResourceController का विस्तार कर सकते हैं:

App.ConversationComments = Ember.ResourceController.extend({ 
    resourceType: App.Comment, 

    // override _resourceUrl() to base the url on the conversation 
    _resourceUrl: function() { 
     return this.get("conversation")._resourceUrl() + "/comments"; 
    } 
    }); 

फिर आप प्रत्येक बातचीत के लिए ConversationComments का एक उदाहरण कॉन्फ़िगर कर सकते हैं:

App.Conversation = Ember.Resource.extend({ 
    resourceUrl:  '/conversations', 
    resourceName:  'conversation', 
    resourceProperties: ['prop1', 'prop2'] 

    // init comments 
    init: function() { 
     this.set("comments", App.ConversationComments.create({ conversation: this })); 
    } 
    }); 

इतना ही नहीं बल्कि, आप प्रत्येक बातचीत के लिए टिप्पणियों को पुनर्प्राप्त करने की आवश्यकता होगी:

conversation.get("comments").findAll(); 

यदि आपके पास जेसन में सभी टिप्पणियां हैं, तो आप वैकल्पिक रूप से loadAll() का उपयोग कर सकते हैं। लोड कहां और कब आप कॉल करें() या findAll() आपके ऐप की ज़रूरतों पर निर्भर करता है। जाहिर है, आप सर्वश्रेष्ठ प्रदर्शन के लिए AJAX कॉल की संख्या को कम करना चाहते हैं।

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

+0

आपकी विस्तृत प्रतिक्रिया के लिए बहुत बहुत धन्यवाद। मैं यह देखने की कोशिश कर रहा हूं कि एम्बर-डेटा का उपयोग करने के लिए मुझे कितने बदलाव करने की ज़रूरत है। अभी भी सोच। –

+0

मैंने आपके दृष्टिकोण को लागू करना शुरू कर दिया और ऐसा लगता है कि संपादन या jjs का फ़ंक्शन सबमिट करें जो टिप्पणी कहता है।saveResource() अभी भी "/ बातचीत /: conversation_id/टिप्पणियां/आईडी" के बजाय जेसन को "/ टिप्पणियां" पथ पर पुट करने के कारण विफल हो गया है, मैं आपके ब्लॉग पोस्ट में संपादन के लिए सुझाए गए डुप्लिकेट को कैसे बनाऊंगा? –

+0

मेरे प्रश्न को कभी न मानें, मैंने स्वयं "संसाधन: टिप्पणियां" हटा दी हैं और केवल नेस्टेड संसाधन कॉन्फ़िगरेशन को रूट.आरबी –

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