2012-04-16 20 views
6

में एक वस्तु के गुणों को मैप नहीं है ऐसा नहीं है कि नॉकआउट सही ढंग से एक सरणी में वस्तुओं के गुणों को मैप नहीं है लगता है।नॉकआउट एक सरणी

क्रोम कंसोल से इस उदाहरण देखें:

> var viewmodel = ko.mapping.fromJS({list:[]}); 
undefined 

> viewmodel.list().unshift({ name : ko.observable("Foo") }); 
1 

> viewmodel.list()[0].name(); 
"Foo" 

> var js = ko.mapping.toJS(viewmodel); 
undefined 

> js.list[0].name; 
undefined 

तो javascript ऑब्जेक्ट बनाया जा रहा है, लेकिन 'नाम' संपत्ति मैप की नहीं होती है।

कोई भी विचार बहुत स्वागत है!

उत्तर

11

http://knockoutjs.com/documentation/plugins-mapping.html से, toJS() समारोह के बारे में:

यह केवल मैप की वस्तु है कि अपने मूल जे एस वस्तु का हिस्सा थे के गुणों से युक्त एक तुच्छ वस्तु का निर्माण करेगा।

जैसा कि "नाम" आपके द्वारा मैप किए गए मूल ऑब्जेक्ट का हिस्सा नहीं था, यह अप्रचलित नहीं होता है। मैं इसे एक बदसूरत का एक सा कहना है एक तरह से इस समस्या को दूर करने के लिए ..

है -

var js = ko.mapping.toJS(viewmodel, { include: ['name'] }); 
+0

त्वरित उत्तर के लिए धन्यवाद। क्या हर संपत्ति को मैप करने के लिए व्यवहार को संशोधित करने का कोई तरीका है? प्रलेखन का उल्लेख इस प्रतीत नहीं होता है। –

+0

@ रिचर्ड एस्टबरी मुझे ऐसा नहीं लगता है। आपको मैपिंग प्लगइन के एक अनुकूलित संस्करण में इसे कड़ी मेहनत करने की आवश्यकता होगी। – Niko

+2

मुझे तब से ko.toJSON (viewModel) मिला है जो नौकरी करने लगता है। –

3

हालांकि निको के जवाब सही है: आप मानचित्रण प्लगइन बताने के लिए इस विशिष्ट संपत्ति शामिल करने की ज़रूरत (सभी गुण मैप किया) के साथ विरोध करने

ko.mapping.toJS(ko.mapping.fromJSON(ko.toJSON(viewmodel))) 

मैं नमूदार को JSON के लिए नमूदार से देखने मॉडल नक्शा: हैक लेकिन यह काम करता है और इसे समझने की बहुत आसान है।

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