2012-09-11 12 views
7

मैं निम्नलिखित Emberjs डाटा मॉडल है:Emberjs डाटा कैसे hasMany-डाटा लोड करने के लिए बाद में

App.File = DS.Model.extend({ 
    like: DS.attr('boolean'), 
    comments: DS.hasMany('App.Comment') 
}); 

App.Comment = DS.Model.extend({ 
    file: DS.belongsTo('App.File'), 
    comment: DS.attr('string') 
}); 

और साथ प्रीलोड:

App.store.load(App.File, {id: 1, like: false}); 

अब मैंने सोचा, अगर मैं इस तरह की टिप्पणियां मिल :

var f = App.store.find(App.File, 1); 
var c = f.get("comments"); 

var c एक खाली एम्बरएरे है और अनुरोध सर्वर को भेजा जाता है। लेकिन मुझे कोई अनुरोध नहीं मिला? मुझे और क्यों करना है? मैं वास्तव में टिप्पणियों को preload करना नहीं चाहता।

इसके अलावा अधिक, अगर मैं एक टिप्पणी जोड़ने, लेकिन यह भी एक साथ फ़ाइल बदलने के लिए:

f.get("comments").createRecord({comment: "test"}); 
f.set("like", true); 
App.store.commit(); 

दो अनुरोधों के सर्वर पर भेज रहे हैं। लेकिन अगर मैं निम्नलिखित JSON (फ़ाइल के लिए) लौटाता हूं:

{ "id": 1, like: true } 

मेरी पहली दृश्य टिप्पणी फिर से गायब हो जाती है। क्यूं कर? और मुझे क्या करना है?

आपकी मदद के लिए धन्यवाद!

उत्तर

1

अपने प्रश्न के पहले भाग के बारे में: आप फ़ाइल के डेटा में टिप्पणी आईडी पॉप्युलेट करना चाहिए:

App.store.load(App.File, {id: 1, like: false, comments: [1, 2, 3]}); 

इसलिए टिप्पणियां आलसी लोड जब जरूरत हो जाएगा।

दूसरे भाग के बारे में: आप निश्चित रूप से अपने सर्वर से जवाब पर टिप्पणी आईडी को क्रमानुसार नहीं है, इसलिए के रूप में आप एक खाली टिप्पणियां सूची का वर्णन टिप्पणियाँ, रीसेट कर रहे हैं।

आपको कम से कम टिप्पणियों को कम से कम वापस दिखाया जाना चाहिए जैसा कि पहले दिखाया गया है ... दोनों मुद्दे जुड़े हुए हैं।

+0

तेज़ उत्तर के लिए धन्यवाद। ठीक। क्या कोई दूसरा रास्ता नहीं है? इस तरह से डेटा के लिए अधिक एसक्यूएल-क्वेरी की ओर जाता है, जो ज्यादातर मामलों में मुझे इसकी आवश्यकता नहीं होती है। और यह दूसरी समस्या के लिए मदद नहीं करेगा, क्योंकि सर्वर के लिए पहला अनुरोध अद्यतन फ़ाइल के लिए अनुरोध है। और दूसरा अनुरोध एड-टिप्पणी अनुरोध है। शायद यह काम करेगा, अगर मैं createRecord के बाद एक दूसरा प्रतिबद्ध-आदेश जोड़ता हूं। –

+0

मैं findQuery के साथ इस्तेमाल की गई मैकेनिज्म को प्रीफेर कर दूंगा। पहली बार जब आप टिप्पणी विशेषता का उपयोग करते हैं, तो एक findQuery सर्वर पर पास किया जाएगा। –

+1

मैं एक समान मुद्दे में भाग गया। यह अच्छा होगा अगर किसी खोज के लिए आईडी की आवश्यकता के बजाय कई कॉल, वे विदेशी कुंजी का उपयोग करके findQuery के माध्यम से लाने का समर्थन करेंगे। मैंने अपने मॉडल में "getComments" विधि जोड़ने का निर्णय लिया जो findQuery चलाता है। – jhorman

0

ऐसा लगता है कि भाग आपके उत्तर में DS.Adapter.findAssociation(...) विधि का उपयोग करना है। हालांकि, मुझे आपके जैसा ही समस्या है जब माता-पिता को सर्वर से फिर से लोड किया जाता है - सभी बच्चे के रिकॉर्ड ज़ेड किए जाते हैं।

मैंने यह देखने के लिए my own question पोस्ट किया है कि मैं यह सॉर्ट आउट कर सकता हूं या नहीं। अगर उस प्रश्न का उत्तर दिया जाता है, तो यह शायद आपके उत्तर भी होगा।

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