2012-07-17 3 views
5

को देखते हुए मॉडल:मैं store.com() से प्रतिक्रिया जेसन के साथ एक DS.Model कैसे अपडेट कर सकता हूं?

Blog.Post = DS.Model.extend({ 
    title: DS.attr('string'), 
    tags: DS.hasMany('Blog.Tag', { embedded: true }) 
}); 

Blog.Tag = DS.Model.extend({ 
    foo: DS.attr('string'), 
    bar: DS.attr('string') 
}); 

और उदाहरण:

var myPost = Blog.Post.createRecord({ id: 45, title: 'Foo Bar' }) 

जब मैं कर myPost.store.commit() (एंबर-डेटा के DS.RESTAdapter के माध्यम से) अपने सर्वर स्वचालित रूप से उत्पन्न टैग की एक सूची है कि लागू किया जाना चाहिए रिटर्न myPost पर। उदाहरण प्रतिक्रिया json:

{ 
    posts: [ 
    { 
     id: 45, 
     title: 'Foo Bar', 
     tags: [ 
     { id: 1, foo: 'bar1' }, 
     { id: 2, foo: 'bar2' } 
     ] 
    } 
    ] 
} 

मैं उम्मीद थी कि myPost के रूप में json द्वारा लौटाए गए दो टैग के साथ खत्म हो जाएगा, लेकिन मैं इसके बजाय यह त्रुटि प्राप्त:

Error: <DS.StateManager:ember448> could not respond to event invokeLifecycleCallbacks in state rootState.loaded.updated.uncommitted. 

मैं गलत यहाँ क्या कर रहा हूँ ?

संपादित करें: आईआईसी प्रति @ माइकएस्की की टिप्पणी को शामिल करने के लिए स्पष्टीकरण जेसन। दिया गया उदाहरण मेरे वास्तविक मामले का सरलीकृत संस्करण है - वास्तविक मामले में टैग आईडी शामिल हैं।

सब आप पर 'मिरर' मॉडल के बीच संबंधों की जरूरत के
+1

क्या आपने उन्हें एम्बेड करने के बजाए टैग को सीलोड करने का प्रयास किया था? –

+2

कुछ अजीब: आपके टैग में आईडी नहीं है। गलत लगता है ... किसी भी Serializer सर्वर पर टैग मॉडल के लिए गायब है? –

+0

@ माइकएस्की मैंने टैग को सीलोड करने की कोशिश नहीं की है - मैं इसे एक शॉट दूंगा और यह कैसे निकलता है पोस्ट करें। टैग आईडी को शामिल करने के लिए प्रश्न अपडेट किया गया; एक साधारण मामले में सवाल उबलते समय मैंने उन्हें बाहर छोड़ा। – ardell

उत्तर

0

पहले: आपके JSON में टैग के लिए

Blog.RESTSerializer = DS.RESTSerializer.extend({ 
    init: function() { 
    this._super(); 

    this.map('Blog.Post',{ 
     tag:{embedded:'always'}, 
    }); 
    } 
}); 

और post_id जोड़ें:

Blog.Post = DS.Model.extend({ 
     title: DS.attr('string'), 
     tags: DS.hasMany('Blog.Tag', { embedded: always }) 
    }); 

    Blog.Tag = DS.Model.extend({ 
     foo: DS.attr('string'), 
     bar: DS.attr('string'), 
     post: DS.belongsTo('Blog.Post') 
    }); 

तो फिर आप अपने एडाप्टर के लिए मैपिंग जोड़ने की आवश्यकता होगी ।

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