2013-03-11 8 views
6

मैंने वास्तव में खोज की है और मुझे अलग-अलग स्वरूपित जेएसओएन प्रतिक्रिया से ऑब्जेक्ट प्राप्त करने के लिए धारावाहिक का उपयोग करने का एक अच्छा उदाहरण नहीं मिला है। JSON प्रतिक्रिया के प्रारूप को बदलने का मेरा कारण यहां http://flask.pocoo.org/docs/security/#json-security पर उल्लिखित है।एम्बर डेटा और जेएसओएन ऑब्जेक्ट्स मैपिंग

मैं अभी तक जावास्क्रिप्ट के साथ बहुत अच्छा नहीं हूं इसलिए मुझे serialize_json.js में हुक को समझने में कठिनाई हो रही थी या शायद मुझे मैपिंग का उपयोग करना चाहिए (मुझे बस पता नहीं है)। तो यहाँ कई वस्तुओं के लिए मेरे JSON उत्तर का एक उदाहरण है:

{ 
    "total_pages": 1, 
    "objects": [ 
    { 
     "is_completed": true, 
     "id": 1, 
     "title": "I need to eat" 
    }, 
    { 
     "is_completed": false, 
     "id": 2, 
     "title": "Hey does this work" 
    }, 
    { 
     "is_completed": false, 
     "id": 3, 
     "title": "Go to sleep" 
    }, 
    ], 
    "num_results": 3, 
    "page": 1 
} 

एंबर-डेटा इस मैं निम्नलिखित त्रुटि मिलती है उपयोग करने के लिए प्रयास करता है:

DEBUG: ------------------------------- 
DEBUG: Ember.VERSION : 1.0.0-rc.1 
DEBUG: Handlebars.VERSION : 1.0.0-rc.3 
DEBUG: jQuery.VERSION : 1.9.1 
DEBUG: ------------------------------- 
Uncaught Error: assertion failed: Your server returned a hash with the key total_pages but you have no mapping for it 

कौन सा पूरी तरह से बनाता है जब आप मेरे कोड को देखो डेटा संग्रह के लिए:

Todos.Store = DS.Store.extend({ 
    revision: 12, 
    adapter: DS.RESTAdapter.create({ 
     mappings: {objects: "Todos.Todo"}, 
     namespace: 'api' 
    }) 
}); 

मेरा प्रश्न मैं total_pages, num_results और page के साथ कैसे पेश करते हैं? और सौदा करके, मेरा मतलब है अनदेखा करें ताकि मैं objects सरणी को मानचित्र कर सकूं।

उत्तर

3

आपके जेएसओएन परिणाम में लौटने वाले सभी रूट गुणों को एम्बर डेटा में डीएस.मोडेल में मैप किया गया है। आपको उन गुणों को वापस नहीं करना चाहिए जिन्हें मॉडलिंग नहीं किया गया है या आपको उनका मॉडल करना चाहिए।

यदि आप त्रुटि से छुटकारा पाने के लिए चाहते हैं तो आपको उन गुणों के लिए खाली मॉडल बनाना चाहिए जिन्हें आप उपयोग नहीं करते हैं।

और पढ़ें here

आप गुण आप का उपयोग नहीं करना चाहते हैं क्यों लौट रहे हैं? या यह आपके नियंत्रण से बाहर है?

+2

मैं उन गुणों को वापस करने जा रहा हूं जिन्हें मॉडलिंग नहीं किया गया है और मैं उन्हें मॉडल नहीं करना चाहता हूं। –

+1

मैं प्रतिक्रिया को संशोधित कर सकता हूं, लेकिन मुझे पता है कि मुझे JSONSerializer के साथ ऐसा करने में सक्षम होना चाहिए। मैं बस नहीं जानता कि कैसे। मेरा मतलब है कि इसका मुद्दा है: जेएसओएन लेने के लिए जो 'अनियमित' है और इसे कुछ एम्बर-डेटा में परिवर्तित कर सकता है। –

+0

@ विलेम डे विट - डेटाबेस द्वारा जोड़े गए _id और __v गुणों के बारे में क्या? क्या हमें उनको मॉडल करने की ज़रूरत है? – netpoetica

1

एम्बर की बातों के बारे में काफी राय है कि चीजें कैसे की जाती हैं। एम्बर डेटा कोई अपवाद नहीं है। एम्बर टीम कुछ मानकों की ओर काम करती है जो सोचती हैं कि यह सर्वोत्तम है, जो मेरी राय में एक अच्छी बात है।

एम्बर जा रहा है, जहां this post देखें। टीएल; डीआर क्योंकि एपीआई कॉल के कई अलग-अलग कार्यान्वयन हैं, वे JSON API का समर्थन करने के लिए अपने प्रयासों को स्थापित कर रहे हैं।

मेरी समझ से, आप जो पूछ रहे हैं उसे करने का कोई आसान तरीका नहीं है। आपका सबसे अच्छा शर्त अपने स्वयं के कस्टम एडाप्टर और क्रमबद्ध लिखना है। ऐसा करना मुश्किल नहीं होना चाहिए, और पहले किया गया है। मैं आपको Tastypie adapter पर पाइथन के Django Tastypie

1

के लिए उपयोग करने का सुझाव देता हूं, इसे पूरा करने का तरीका एक कस्टम धारावाहिक के साथ है। अपने सभी डेटा इस प्रारूप में सर्वर से लौटाया जाता है तो आप बस ApplicationSerializer इस तरह बना सकते हैं:

DS.RESTSerilizer.extend({ 
    normalizePayload: function(type, payload) { 
    delete payload.total_pages; 
    delete payload.num_results; 
    delete payload.page; 
    return payload; 
    } 
}); 

कि एंबर डाटा अपने एपीआई मूल का उपभोग करने के लिए अनुमति चाहिए।

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