2013-09-24 10 views
7

मेरे मॉडल के लिए एम्बर डेटा का उपयोग करने में, कुछ ऐसे मामले हैं जहां मुझे डेटा सीमाओं के आसपास काम करने और मेरे सर्वर पर अन्य अर्ध-आराम वाले यूआरएल तक पहुंचने की आवश्यकता है।एम्बर डीएस के लिए सर्वर यूआरएल प्राप्त करें। मॉडेल क्लास

उदाहरण के लिए, मेरे पास Feed ऑब्जेक्ट है जो डेटा की स्ट्रीम रिकॉर्ड करता है।

/feeds/:feed_id 

क्रम शुरू करने और एक फ़ीड रिकॉर्डिंग बंद करने के लिए, मैं की तरह एक यूआरएल के लिए एक PATCH भेजने की जरूरत है: मॉडल तक पहुँचने के लिए मैं एक RESTful समाप्ति बिंदु है

/feeds/:feed_id?update_action=start 

इसके बाद मैं फिर से लोड कर सकते हैं मेरे मॉडल और उसमें परिलक्षित परिवर्तन देखें।

इस मामले में, मुझे $.ajax तक पहुंचने की आवश्यकता है और यूआरएल एक एम्बर का उपयोग करने जैसा ही होगा। हालांकि, मैं यह नहीं समझ सकता कि एम्बर से इस जानकारी को कैसे निकाला जाए।

अब तक सबसे अच्छा मैं क्या कर सकते हैं:

DS.Model.reopen 

    rootForModel: Ember.computed(-> 
    @.store.adapterForType(@).serializer.rootForType(@.constructor) 
) 

    pluralRootForModel: Ember.computed(-> 
    @.store.adapterForType(@).serializer.pluralize(@get("rootForModel")) 
) 

इस तरह App.FeedItem का एक उदाहरण के लिए मैं ऐसा कर सकते हैं:

this.get("rootForModel") # feed_item 
this.get("pluralRootForModel") # feed_items 

और मैं इस के साथ सिंक में रहना होता अनुमान लगा रहा हूँ एडाप्टर आदि

बाद में किए गए किसी भी सेटिंग, मैं कॉल कर सकते हैं जैसे:

$.ajax 
    url: @get("pluralRootForModel") + "/" + @get("id") 
    data: 
    update_action: "start" 
    type: "PATCH" 

क्या यह पूरी तरह से बाएं क्षेत्र में बाहर है? क्या इन यूआरएल को लिखने का कोई और सीधा तरीका है?

एक और (संबंधित समस्या) किसी दिए गए मॉडल के लिए अंडरस्कोर नाम प्राप्त कर रहा है।

Ember.Object.reopenClass

###* 
* The underscored name for this. 
* i.e. App.MyClass -> my_class 
* From an instance, use this.constructor.underscored_class_name() 
* @return {String} This classname, underscored. 
### 
underscored_class_name: -> 
    _.underscored("#{@}".replace(/^.*?\./g, "")) 

यह पागलपन है:

App.MyModelController => my_model_controller 

मैं की तरह कुछ किया है? क्या कोई बेहतर तरीका है?

उत्तर

3

Check out buildURL in DS.RESTAdapter

यदि आप सर्वर पथ और कुंजी में अंडरस्कोर का उपयोग करना चाहते हैं, तो DS.ActiveModelAdapter (और इसके डिफ़ॉल्ट सीरिएलाइज़र, DS.ActiveModelSerializer) देखें। इस एडाप्टर का अपना कार्यान्वयन buildURL है।

+0

मैं 'DS.RESTAdapter.prototype.buildURL ('my-model-type') पर बस गया – aceofspades

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