ember.js - Ember, the right way of creating interface for saving records with hasmany relationships -
मेरे पास ये मॉडल हैं:
Gmcontrolpanel.Offer = DS.Model.extend ({ नाम: DS.attr ('string'), दिनांक: DS.attr ('string'), अवधि: DS.attr ('संख्या'), उत्पाद: DS.hasMany ('उत्पाद', {async: true}), }); Gmcontrolpanel.Product = DS.Model.extend ({name: DS.attr ('string'), विवरण: DS.attr ('string'), ऑफ़र: DS.belongsTo ('प्रस्ताव'), विविधताएं: DS.hasMany ( 'विविधता', {async: true})}); Gmcontrolpanel.Variation = DS.Model.extend ({विवरण: DS.attr ('string'), मात्रा: DS.attr ('number'), मूल्य: DS.attr ('string'), उत्पाद: DS.belongsTo ( 'उत्पाद')}); मैं एक ऑफ़र बनाने / संपादित करने के लिए पुन: उपयोग करने योग्य इंटरफ़ेस बनाने की कोशिश कर रहा हूं; मैंने एक उत्पाद डालने और एक भिन्नता डालने के लिए दो अलग-अलग दृश्य बना लिए हैं;
उत्पाद दृश्य में उत्पादों को जोड़ने या निकालने के लिए + और एक-बटन है, और भिन्नता दृश्य के लिए समान है;
मार्ग के लिए मॉडल है:
मॉडल: फ़ंक्शन () {return.get ('store')। createRecord ('प्रस्ताव'); } मुझे क्या चाहिए, यह है कि, सहेजें बटन पर क्लिक करते समय, सभी (ऑफ़र, उत्पाद और विविधताएं) सहेजे जाते हैं;
सबसे पहले: जो एक है इसे लागू करने का सबसे अच्छा तरीका है? containerViews? संग्रह दृश्य या {{#each}} लूप?
और फिर, मैं बाल अभिलेख कैसे बना सकता हूं और उन्हें बाल दृश्यों पर इनपुट फ़ील्ड में बाँध सकता हूं? मेरा मतलब है: हर बार एक उत्पाद वीव डाला जाता है और विविधताओं के लिए भी यही एक ही समय बना सकता है, लेकिन जब मैं बचत करता हूं तो इन सभी रिकॉर्डों को कैसे प्राप्त कर सकते हैं और सभी रिश्ते क्षेत्र ठीक से सेट कर सकते हैं?
इस रिश्ते को कैसे स्थापित करें, इसका एक कंकाल उदाहरण है:
var newOffer = store.createRecord (' प्रस्ताव ', {नाम: ....}); // या आप newOffer.set ('नाम', ...) कर सकते हैं; var newVariation = store.createRecord ('भिन्नता', {description: .....}); var newProduct = store.createRecord ('उत्पाद', {नाम: ..., विवरण: .....}); newProduct.get ( 'विविधताओं') pushObject (newVariation)। newOffer.get ( 'उत्पाद') pushObject (newproduct)। लेकिन मॉडल को बचाने के लिए और इसे डीबी में जारी रखने के लिए, एक मामूली समस्या है प्रति मॉडल प्रति सहेजा जाता है, इसलिए जब आपके पास रिश्ते को ठीक से सेट अप करते हैं, तो जब हम ऑफर मॉडल पर सहेजते हैं, तो इसके साथ जुड़े आंकड़ों को सम्मिलित नहीं करता हैमेनल संबंध मॉडल इसलिए हम ऐसा कुछ कर सकते हैं:
ध्यान दें: मैंने थोक बचत के बारे में पढ़ा है, लेकिन अभी तक इसे करने की कोशिश नहीं की है - आप इसे एक शॉट देना चाहते हैं, लेकिन अगर यह काम नहीं किया जाता तो मैं इसे बचाऊंगा
newVariation.save ()। तब (फ़ंक्शन () {newProduct.get ('विविधताएं') जैसे पुशऑब्जेक्ट (नयावेरेशन); // भिन्नता मॉडल पहले से ही है सहेजा गया, यह मॉडल के साथ जुड़ा हुआ आईडी है / इतने Ember डेटा अब जानता है कि उसे विविधताओं के रूप में भिन्नताएं निर्धारित करनी चाहिए: [विविधता मॉडल का आईडी जिसे हम सहेजे गए हैं] उत्पाद के लिए पोस्ट अनुरोध भेजते समय newproduct.save ()। फिर {// जैसा कि ऊपर दिखाया गया है}}, फ़ंक्शन () {// हैंडल असफलता} यहां मामला सरल था, हमारे पास सिर्फ एक भिन्नता और एक उत्पाद था लेकिन आपके पास इनमें से अधिक से अधिक हो सकते हैं। आरएसवीपी.ऑल को बचाए रखने के वादे को सिंक करने के लिए कर सकते हैं, लेकिन यह थोड़ा सुस्त है क्योंकि आपको प्रत्येक एडीसी के लिए अलग से एपीआई कॉल करना पड़ता है और आपके पास कई भिन्नताएं और उत्पादों हो सकते हैं, एजेक्स कॉल की कोई बात नहीं पागल हो सकती है। का इस के आसपास हो रहा है कि आप मॉडल के माध्यम से पाशन करके अपनी खुद की जेएसएन संरचना बनाते हैं, और मॉडल को एकल जेसन में जोड़ते हैं और एक ही पोस्ट का अनुरोध करें, jQuery के एजेक्स एपीआई कॉल से, अपने डीबी में सामग्री को बचाएं और फिर पुशपायलोड का उपयोग करें ( ) सभी डेटा वापस स्टोर में लोड करने के लिए।
यही मैंने इसी तरह की स्थिति में किया है, लेकिन वहां अधिक योग्य समाधान हो सकते हैं, इसलिए मैं इस पर अधिक राय पर प्रतीक्षा करूँगा।
दृश्य वस्तु के लिए, मुझे लगता है कि आपको केवल उत्पाद के लिए एक दृश्य की आवश्यकता होगी, यह वही है जो सोच रहा है:
// offer.hbs फॉर्म elemtts का गुच्छा अद्यतन करने के लिए नाम का विवरण + - उत्पाद को जोड़ने के लिए बटन {{#each उत्पाद}} {{productview view product = this}} // यह सिर्फ एक सामान्य दृश्य है {{/ प्रत्येक}} // productView से संबद्ध आपका टेम्पलेट उत्पाद की विविधताओं को जोड़ने के लिए
+ - बटनों की तरह होगा {{#each product.variations}} नाम और विवरण को अपडेट करने के लिए फार्म elments दिखाएँ {{/ प्रत्येक} }
Comments
Post a Comment