से टाइपस्क्रिप्ट क्लास मानों को प्रारंभ करना मैं नॉकआउटजेएस के साथ कुछ कक्षाएं बनाने के लिए टाइपस्क्रिप्ट का उपयोग कर रहा हूं, जिसमें वेबएपीआई द्वारा लौटाए गए कुछ JSON से डेटा लोड किया जा रहा है।कन्स्ट्रक्टर
समस्या यह है कि मैं JSON मानों को मेरे टाइपस्क्रिप्ट क्लास में कन्स्ट्रक्टर से कॉपी करना चाहता था: लेकिन यदि मैं इसे केवल बेस क्लास में करता हूं, तो विरासत गुणों को परिभाषित नहीं किया गया है और इसलिए प्रारंभ नहीं किया गया है।
उदाहरण
हम एक JSON प्रतिक्रिया से एक सूची आइटम बनाने के लिए करना चाहते हैं:
export class Product {
Name = ko.observable("");
constructor(source) {
// a utility that copies properties into this instance
utils.CopyProperties(source,this);
}
export class Inventory extends Product {
Quantity = ko.observable(0);
Price = ko.observable(0);
constructor(source) {
super(source); // call base c'tor
// the quantity and price properties are only now defined
}
}
संपत्तियों के लिए:
{ Name: "Test", Quantity:1, Price: 100 }
मैं एक आधार वर्ग उत्पाद और एक विरासत वर्ग सूची है सूची केवल सुपर कन्स्ट्रक्टर कॉल के बाद जेएस आउटपुट कोड में बनाई गई है, इसलिए उत्पाद निर्माण के समय मौजूद नहीं है या निष्पादित किया गया है।
एकमात्र समाधान जो मैं देख सकता हूं वह है कि कन्स्ट्रक्टर से शुरुआती मूल्य लेना है, लेकिन मुझे वास्तव में यह दृष्टिकोण पसंद नहीं है, हालांकि मुझे संदेह है कि यह एकमात्र विकल्प है।
var inventoryItem = new Inventory();
inventoryItem.LoadFrom(source);
आधार उदाहरण में गुणों की प्रतिलिपि बनाने का उद्देश्य क्या है? क्या प्रतिलिपि के बाद मात्रा और मूल्य परिभाषित किया गया है? – BSick7
मुझे यकीन नहीं है कि मैं समझता हूं कि समस्या क्या है। 'उत्पाद' के निर्माता को' स्रोत' से 'नाम' सेट करना चाहिए और 'सूची' के निर्माता को 'स्रोत' और 'मूल्य' को 'स्रोत' – MiMo
से सेट करना चाहिए समस्या यह है कि आपको प्रतिलिपि गुणों को दो बार कॉल करना होगा: जो कुछ समझ नहीं आया। यदि आपने इसे उत्पाद वर्ग में अभी किया है, तो यह केवल नाम सेट करेगा। यदि आपने इसे केवल सूची में किया है, तो आप इसे उत्पाद में नहीं बुला रहे हैं, इसलिए कोई भी उत्पाद बनाने वाला कोई भी प्रारंभ नहीं किया जाएगा – Quango