2013-09-06 6 views
7

मैं सर्वर से निम्न डेटा प्राप्त: मैं नॉकआउट मानचित्रण प्लगइन का उपयोग कर डेटा को मैप के बादKO मानचित्रण मुद्दे वस्तुओं

var data = [{ id: 0, child: { prop1 : 'a', prop2 : 'b' } } //Child object has data 
      ,{ id: 0, child: null } ]; // Child object is null 

मैं कुछ समस्याएं आ रही हैं। मुद्दा यह है कि आंतरिक child ऑब्जेक्ट एक ही प्रकार का नहीं है।

इस क्रियान्वित करने के बाद:

ko.mapping.fromJS(data, viewModel.data); 

मुझे लगता है कि पहली वस्तु डेटा के साथ प्रकार Object के child संपत्ति है मिलता है। हालांकि दूसरी ऑब्जेक्ट में child प्रकार Observable है, जब यह अनचाहे रिटर्न शून्य हो जाता है।

मैं इसे दोनों मामलों में कैसे बना सकता हूं वस्तुओं में एक ही प्रकार का मूल्य होता है और दूसरा एक शून्य है। सर्वर व्यवहार करने के तरीके को बदलना एक विकल्प नहीं है। मुझे Object और null या Observables दोनों होने की उम्मीद है।

जेएसफ़िल्ड here

उत्तर

4

आप create option उपयोग करने के लिए मानचित्रण प्लगइन बताने के लिए कि यह कैसे अपने child संपत्ति नक्शा चाहिए की जरूरत है।

तो तुम Object और होने के लिए चाहते हैं, तो null आप null वापस जाने के लिए जब आपका बच्चा संपत्ति null है की जरूरत है:

var mappingOptions = { 
    child: { 
     create: function(options) { 
      if (!options.data) 
       return null; 
      return ko.mapping.fromJS(options.data); 
     } 
    } 
} 

ko.mapping.fromJS(data, mappingOptions, viewModel.data); 

डेमो JSFiddle

या आप उन दोनों को Observables चाहते हैं:

var mappingOptions = { 
    child: { 
     create: function(options) { 
      return ko.observable(ko.mapping.fromJS(options.data)); 
     } 
    } 
} 

ko.mapping.fromJS(data, mappingOptions, viewModel.data); 
+0

हमेशा शून्य मान के लिए options.data का परीक्षण करें और फिर खाली ko.observable() –

0

के रूप में उल्लेख किया है, समाधान है मानचित्रण विकल्प है, लेकिन हमेशा परीक्षण शून्य मान के लिए options.data और उसके बाद खाली ko.observable वापस जाने के लिए सुनिश्चित करें(), अन्यथा आपको बाध्यकारी के साथ बहुत परेशानी होगी! मैंने इसे खोजने पर काफी समय बिताया।

var mappingOptions = { 
    child: { 
     create: function (options) { 
      return options.data != null ? ko.observable(ko.mapping.fromJS(options.data)) : ko.observable(); 
     } 
    } 
} 
संबंधित मुद्दे