2013-08-18 7 views
8

जब आपके पास JSON $ संसाधन होता है तो आप परिणामस्वरूप ऑब्जेक्ट्स को एक बार प्राप्त करने के लिए अधिक विशिष्ट वस्तुओं में कैसे डाल सकते हैं?कोणीय जेएस कस्टम मॉडल ऑब्जेक्ट्स के साथ ऑब्जेक्ट्स?

उदाहरण के लिए, अभी वे ऑब्जेक्ट्स के ऐरे के रूप में वापस आते हैं, लेकिन मैं चाहता हूं कि वे "नियुक्ति" ऑब्जेक्ट्स के ऐरे के रूप में वापस आएं, ताकि मेरे पास उस नियुक्ति वस्तु पर कुछ विधियां हो सकें जो इसके बारे में प्रश्नों का उत्तर देगी नियुक्ति वस्तु। पूर्व: क्या इस नियुक्ति के साथ कोई सेवाएं जुड़ी हैं? क्या यह नियुक्ति सुबह या दोपहर में है?

पहले मैंने सोचा था कि ट्रांसफॉर्मेशन हुक ngResource से काम करेगा, लेकिन यह काम नहीं करता है। उस से वापसी वास्तविक वस्तुओं नहीं है। ऐसा लगता है कि उस फ़ंक्शन के साथ आप JSON पार्सिंग से पहले वास्तविक डेटा को केवल संशोधित कर सकते हैं।

अंत में, मैं सवाल करता हूं कि यह एक उचित कोणीय जेएस तकनीक भी है? या इन सहायक विधियों को केवल नियंत्रक या किसी अन्य मॉड्यूल में दिखाना चाहिए और ऑब्जेक्ट को काम करने के लिए स्वीकार करना चाहिए? मैं बस अपने क्लीनर को ऑब्जेक्ट में लपेटने के बारे में सोचता हूं, लेकिन मैं मानता हूं कि मैं कोणीय जेएस में बहुत अनुभवी नहीं हूं।

उत्तर

22

आप एक कारखाने का उपयोग कर और एक समारोह आप उदाहरण के लिए लौटे आइटम के प्रोटोटाइप के लिए समारोह में जोड़ सकते हैं (DEMO) जोड़ना चाहते हैं कर रहे हैं:

app.factory('Appointment', ['$resource', function($resource) { 
    var Item = $resource('appointments.json',{/*bindings*/},{/*actions*/}); 

    Item.prototype.hasServices = function() { 
    if(this.services.length > 0) return true; 
    else return false; 
    }; 

    Item.prototype.partOfDay = function() { 
    if(this.time.split(':')[0] > 12) return "afternoon"; 
    else return "morning"; 
    }; 

    return Item; 

}]); 

और फिर में अपने संसाधन पर इस तक पहुंच नियंत्रक:

$scope.appointments = Appointment.query({}, function() { 
    console.log($scope.appointments[0].partOfDay()) 
}); 
ध्यान में रखते हुए

या सीधे उदाहरण के लिए अंदर एक एनजी-दोहराने:

{{appointment.partOfDay()}} 

अपने अंतिम प्रश्न का उत्तर देने के लिए, मुझे लगता है कि उपर्युक्त समाधान उचित कोणीय तकनीक है। जैसे ही आपके पास किसी विशिष्ट संसाधन प्रकार से जुड़े फ़ंक्शंस होते हैं, यह मेरी राय में संबंधित संसाधन ऑब्जेक्ट में सीधे उन्हें जोड़ने का सर्वोत्तम होता है। आपको नियंत्रक में सहायक फ़ंक्शन क्यों बनाना चाहिए जब आपको संसाधन को पैरामीटर के रूप में पास करना होगा और अतिरिक्त क्रियाएं एकाधिक नियंत्रकों या स्कॉप्स में उपयोग की जा सकती हैं ?!

+1

उदाहरण प्लंकर के लिए धन्यवाद। मुझे लगता है कि जब आप JSON सेवा से Arrays प्राप्त कर रहे हैं तो मैं वास्तव में समझ नहीं रहा हूं कि संसाधन कैसे काम कर रहा है। जब मैं चीजों को डीबग करता हूं, तब भी यह "संसाधन" ऑब्जेक्ट सेट करता है, लेकिन मुझे लगता है कि वास्तव में प्राप्त होने के बाद, यह किसी भी तरह नियुक्ति वस्तु पर सेट हो जाता है? मेरे पास यह काम कर रहा है, लेकिन सिर्फ यह समझना है कि मुझे यह कैसे काम मिल रहा है। –

+1

कारखाने को केवल नियुक्ति कहा जाता है और यह अपने प्रोटोटाइप में जोड़े गए अतिरिक्त कार्यों के साथ मानक संसाधन ऑब्जेक्ट देता है। –

+1

यह मूल रूप से वही है जब आप सादे जेएस में एक मूल कार्य लिखते हैं जिसे अपॉइंटमेंट कहा जाता है जो कुछ गुणों के साथ ऑब्जेक्ट देता है। अनुरोधित जेसन के साथ इसका बहुत कुछ नहीं है। जैसे ही AJAX अनुरोध समाप्त हो जाता है, परिणाम संसाधन ऑब्जेक्ट में जोड़ा जाता है। –

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