2013-03-20 4 views
10

मैं KnockoutJS की मानचित्रण प्लगइन के साथ एक मुद्दा है जहाँ मैं निम्न कार्य करने में चल रहा हूँ:नॉकआउट मानचित्रण - खोज कस्टमाइज़ नेस्ट के साथ बनाएं ऑब्जेक्ट्स

  1. एक वस्तु
  2. की मैपिंग निर्माण अनुकूलित मानचित्रण निर्माण अनुकूलित नेस्टेड ऑब्जेक्ट्स की सरणी # 1 से।

इस fiddle example मैं कोशिश कर रहा हूँ में बच्चों ठीक से अपने कस्टम निर्माण के लिए मैप किया गया है। अपेक्षित परिणाम यह है कि बच्चों में से प्रत्येक में विवरण संपत्ति शामिल है। बेला से, परिणाम पढ़ना चाहिए:

  • एडम स्मिथ
  • बॉब 5 वर्ष
  • क्रिस है 7 वर्ष

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

ko.mapping.fromJS(additionalData, parentMapping, viewModel); 

दुर्भाग्य से, यह दोनों होने खाली प्रारंभिक बच्चों और मानचित्रण दो बार की आवश्यकता है। यह स्वीकार्य नहीं है क्योंकि वास्तविकता में कोड में बहुत गहरा पदानुक्रम है।

उपरोक्त के अतिरिक्त, मैं parentMapping में निम्न कोड जोड़ने की कोशिश की है:

var mapping = { 'ignore': ["children"] }; 
var innerModel = ko.mapping.fromJS(options.data, mapping); 
//for brevity 
innerModel.children = ko.mapping.fromJS(options.data.children, childMapping); 

यह प्रारंभिक मानचित्रण पर बच्चों वस्तुओं मानचित्रण का प्रभाव पड़ता है। हालांकि, सभी बाद के मैपिंग बच्चे संपत्ति को अनदेखा किया जाता है।

क्या नॉकआउट मैपिंग के साथ माता-पिता और बच्चे दोनों ऑब्जेक्ट के निर्माण को अनुकूलित करने का कोई तरीका है?

धन्यवाद।

+0

यह आपके लिए किसी भी उपयोग है? http://stackoverflow.com/questions/15480316/knockout- गतिशील- बाइंडिंग-issue/15480602?noredirect=1#comment21977967_15480602 –

+0

धन्यवाद पॉल, यह समाधान मेरे लिए काम करता है। –

उत्तर

16

http://jsfiddle.net/5cfa3/23/

var viewModel = {}; 

var data = { 
    id: "1", 
    firstName: 'Adam', 
    lastName: "Smith", 
    children: [ {id: "2", name: "Bob", age: 5}, {id: "3", name: "Chris", age: 7 }] 
}; 

var Parent = function(data){ 
    ko.mapping.fromJS(data, mapping, this) 
}; 

var mapping = { 
    create:function(options){ 
    var parent = new Parent(options.data); 
    parent.fullName = ko.computed(function(){ 
     return parent.firstName() + " " + parent.lastName(); 
    }); 
    return parent; 
    }, 
    'children': { 
    create: function(options) { 
     options.data.description = ko.computed(function(){ 
      return options.data.name + " is " + options.data.age + " years old "; 
     }); 
     return ko.mapping.fromJS(options.data);   
    } 
    } 
}; 

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

ko.applyBindings(viewModel); 
+0

धन्यवाद। यह वही है जिसे मैं देख रहा था। –

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